2011-12-06 24 views
2

に正しいことを知っています。今、私はいくつかの頭字語タグのクラスを変更したいがどのように私は私の選択は、私はHTMLの次のコード持っているのjQuery

<div class="myclass" id ="class1"> 
    <ol class="list"> 
    <li id="li_1"> 
     <input id="input_1" …> 
     <acronym id="input_1" class="classabc"> 
     </li> 
     <li id="li_2"> 
      <input id="input_2" …> 
      <acronym id="input_2" class="classabc"> 
     </li> 
     .... 
     <li id="li_n"> 
      <input id="input_n" …> 
      <acronym id="input_n" class="classabc"> 
     </li> 
    </ol> 
</div> 

を、私は、頭字語タグのIDを持っています私はこれを試してみました:

$('acronym#'+id).removeClass('classabc'); 
$('acronym#'+id).addClass('newclass'); 

それはので、私が試した動作しませんでした:

$('div.myclass ol acronym#'+id).removeClass('classabc'); 
$('div.myclass ol acronym#'+id).addClass('newclass'); 
しかし、それはまだ動作しません。 コード内でアラートを試みましたが、アラートは機能します。セレクタが正しくないと思っています。だから私は正しいセレクタを得るためにとにかく頼んでいるのですか?または、セレクタが正しいことをどのように知っていますか?

+0

''頭字語#_' + id'は本当にありませんか? – kojiro

+1

'id'の値は何ですか?そして、DOMの準備ができたら実行されているコードですか? – RightSaidFred

+2

FYIのIDは一意であるため、その前にタグ名を含める必要はありません。これは、追加の(不要な)チェックを追加するだけです。 – Wiseguy

答えて

2

ここで重要な問題:id属性はドキュメント固有のものでなければなりません。同じid属性を何回か使用しましたが、これはidセレクタを使用して結果が得られない(または予測できない)結果につながります。

+0

少なくともIEでは確認済みです。 jQueryはヘルパーであり、DOMルールの適用手段ではないことを覚えておいてください。 – villecoder

2

(あなたが重複したIDを持っているので)あなたが探しているはずだ基本的なセレクタは次のようになります。

$('acronym[id='input_n']) 

ので、あなたが閉じる引用符を含める必要があるだろう:

$("acronym[id='input_" + n + "']") 

注: idsが重複しているため、この回答はより一般的な$('#input_n')セレクタを使用していません。

+0

それは正しくありません。あなたのセレクタは '' – RightSaidFred

+0

@ RightSaidFredを探しています - あなたが正しいです - 私は編集が完了する前に速すぎて入力しました。 – JW8

+0

答えはオリジナルから編集されましたが、なぜ '#' idセレクターの代わりに 'id'フィルターを使うのですか? – RightSaidFred

5

2つの要素に対して同じidを宣言するのは適切ではありません。

idacronymから削除し、次のjavascriptを使用してください。ここで

<input id="input_1"> 
<acronym class="classabc"> 

どこvar id = "input_1";

$('#'+ id).siblings('acronym').removeClass('classabc'); 

The Fiddle

CSSセレクタを学習するW3Schoolsのリンクです。 http://www.w3schools.com/cssref/css_selectors.asp

+0

しかし、 '頭字語'は余分な部分は無効ではないので、コードを削除してもコードの結果は変わりません。 – RightSaidFred

+0

編集したJSに 'acronym'への参照を追加しました。 –

+0

私は、OPに重複IDがあることに気付かなかった。 ''# '+ id'が何をするのかは難しいです。おそらく最初に見つかったものを取得しますが、無効なマークアップでは決して確かめられません。 – RightSaidFred

1

理想的には、ページ上のidはすべてのDOM要素に対して一意である必要があります。 idで要素を探す場合は、idセレクタを使うことができます。試してみてください

$('#'+id).removeClass('classabc'); 
$('#'+id).addClass('newclass'); 
関連する問題