2012-01-08 7 views
0

以下で使用するクラスをindent_1からindent_2、indent_4からindent_2に変更するには、どのjqueryを使用できますか?私はクラスを削除することについて知っていますが、クラスが異なる名前である場合、どのようにすればいいですか?jQueryを使用してクラスを別のクラスに置き換えるにはどうすればよいですか?

<div class="rep_td0 indent_1" id="title_1">Menu two</div> 
or 
<div class="rep_td0 indent_4" id="title_1">Menu two</div> 
+0

あなたが変わるの名前とはどういう意味ですか? –

+0

"indent_"の後の数字は0,1,2,3のいずれでもかまいません。 –

+1

同じIDのページに2つの要素がある場合は、IDで選択する際に問題に遭遇します。一部のブラウザはまったく動作しませんが、他のブラウザは一致する最初の要素だけを返すことがあります。 – kasdega

答えて

2

あなたはどのクラスを別のクラスに変更したいのかをあまり詳しく説明していないので、そのクラスが何であるか正確にわからない場合に対処したいと言いました。 :

あなたがこのセレクタで「indent_」で始まるクラスを持つすべてのオブジェクトを見つけることができます:あなたは、これらのオブジェクトのそれぞれのクラスを検討したい場合

$('[className^="indent_"]') 

、あなたがいることを反復処理でき.each()でjQueryオブジェクトを作成し、各オブジェクトで何をすべきかを決めるか、カスタム関数とexamiでremoveClass()を使うことができますクラス名を決めて、それをどうするか決めてください。

$('[className^="indent_"]').removeClass(function(index, name) { 
    var match = name.match(/\bindent_\d+\b/); 
    if (match) { 
     return(match[0]); 
    } else { 
     return(""); 
    } 
}).addClass("indent_2"); 
:正規表現を使用してクラス名を調べることができますカスタム関数を使用して、

$('[className^="indent_"]').removeClass("indent_1 indent_3 indent_4").addClass("indent_2"); 

のか:あなただけindent_2するすべてのインデントのクラス名を変更したい場合は

、その後、あなたはこれを使用することができます

それとも、あなたがしたいすべてがID =「タイトル」を持つオブジェクトを検索し、それのクラス名を修正している場合、あなたはこのようにそれを行うことができます。

var o = document.getElementById("title_1"); 
o.className = o.className.replace(/\bindent_\d+\b/, "indent_2"); 

あなたがここに、この最後の作品見ることができます:あなたは異なる番号を取ることができる関数にこれをしようとしている場合は、この使用することができhttp://jsfiddle.net/jfriend00/tF8Lw/

を:

function changeIndentClass(id, indentNum) { 
    var item = document.getElementById(id); 
    item.className = item.className(/\bindent_\d+\b/, "indent_" + indentNum); 
} 
+0

ありがとうございます。オブジェクトのIDがtitle_1であることを確認するにはどうすればよいですか? –

+0

多分私はこれを行うことができます:$( '#title_1')。removeClass( "indent_1 indent_3 indent_4")。addClass( "indent_2"); –

+0

@ Melissa - 答えの最後に、id = "title_1"オブジェクトだけを変更するオプションを追加しました。それが最初からやりたかったことだけを説明したのであれば、これは方法、簡単な問題です。 – jfriend00

3

あなたが利用可能であることを確認、更新この

$("#title_1").removeClass("indent_1").removeClass("indent_4").addClass("indent_2"); 

を試していない場合

$("#title_1").removeClass("indent_1").addClass("indent_2"); 

、このコードを試してみてください。

$("#title_1").removeClass(function() { 
    var match = $(this).attr('class').match(/\bindent_\d+\b/); 
    if (match) { 
     return (match[0]); 
    } else { 
     return (""); 
    } 
}).addClass("indent_2"); 
+0

これはうまくいくと思いますが、すべてのクラスを削除することを指定することなくそれを行う方法があります。インデントレベルを変更したいのですが、どのレベルが設定されているのかわかりません。多くの組み合わせがあった場合は、それぞれのハードコーディングを意味します。 –

+0

@ Melissa:更新された回答を試してください。 –

1

以下試してみてください。

ここ
$('#title_1').removeClass('indent_1').addClass('indent_2'); 

は、indent_1クラスはindent_2に置き換えられます。

+0

申し訳ありませんが、多分私はうまく説明しませんでした。私はインデントクラスの正確な名前を確認することはできません。 _の後の数字は異なる場合があります。私は "indent_x"のように見えるクラスをチェックし、そのクラスを削除するワイルドカードの方法が必要です。 –

0

を多分これがRemove all classes that begin with a certain stringを?:

これは、 'indent_'のような特定の接頭辞を持つjQuery要素のクラス名を置き換える方法を示しています。

その答えは、具体的交換には対応していませんが、あなたは少しその答えの一つを変化させることによって、それを達成することができます:最初の...

$("selector").className = $("selector").className.replace(/\bindent.*?\b/g, 'indent_2');

または類似の

+0

ニースは見つけましたが、何かが重複していることを知っていれば、質問にコメントを投稿して言うことができます:考えられる重複の可能性...ここにリンクを挿入...しかし、その答えを見つけることに感謝します。 – kasdega

+0

@kasdega十分に公正で、将来するでしょう。私はちょうどそれと一緒に行った。 – digitlworld

+0

あなたのリンクに答えがあるかもしれません。 $( '#title_1')。className = $( '#title_1')。className.replace(/ \ bbg。*?\ b/g、 '');私は正規表現をどのようにコードするのか分かりません。 –

0

まず物事を。 ..あなたが同じIDであなたのページに複数の要素を持っているなら、あなたはそれらをIDで選択する際に問題があるでしょう。一部のブラウザはまったく動作しませんが、他のブラウザは一致する最初の要素だけを返すことがあります。

まず、IDのものを整理する必要があります。

あなたのクラス名パタパタと一致するすべてのクラスを検索して、あなたがそれらを切り替えたりしないようにしたいかどうかを決定するためのセレクタで始まるを使用することができます。

$('[class^="indent_"]').each(function() { 
    var me = $(this); 
    if(me.hasClass("indent_1").removeClass("indent_1").addClass("indent_2"); 
}); 
+0

私は複数の行を持っていますが、各行の要素は異なるタイトルでマークされています。 title_1の最初の行とtitle_2の2番目の行などがあります。行番号はわかっているので、そのIDの要素のチェックを行うことでその行を選ぶことができます。 –

関連する問題