8

#somecontainer子が持っている内部の各アンカーにクラスを追加しようとしています.someclass

例えば。

<div id="container">
<a><span class="someclass"></span></a>
<a></a>
<a><span class="someclass">/span></a>
</div>

上記のコードでは、1 番目と 3 番目のアンカーにクラス '.anotherclass' を持たせたいです。このコードを試しましたが、うまくいかないようです

jQuery('#container a').each(function(){
jQuery(this).has('.someclass').addClass('anotherclass');
})

Update : jQuery オブジェクトではなく.has()a を返します。booleanそのため、コードが機能しませんでした

4

3 に答える 3

14

あなたの問題は、HTML の形式が正しくない、つまり、スパンを閉じる必要があるという事実に起因すると思われます。

<div id="container">
<a><span class="someclass"></span></a>
<a></a>
<a><span class="someclass"></span></a>
</div>

:hasさらに、 を使用して目的のクラス名に一致する要素を含むアンカーのみを選択することで、コードを少し簡略化できます。

$('#container a:has(.someclass)').addClass('anotherclass');

containerつまり、「IDを持つ要素の子孫であり、class を持つ子孫を持つすべてのアンカーを選択しますsomeclass

Jon が指摘したように、代わりに基本的なセレクターを使用してから、カスタム関数を使用して結果のコレクションをフィルター処理することもできます。

$('#container a').filter(function(){
    return $(this).has('.someclass').length > 0
}).each(function(){
    $(this).addClass('anotherclass');
});

関数はtrue、保持する要素と保持しない要素に対して返す必要falseがあります。

于 2012-12-05T12:23:09.107 に答える
4

試す:

$('#container a .someclass').parents('a').addClass('anotherClass');

基本的には、クラス 'someclass': を持つ要素を見つけるために下に向かって作業し、そこから、クラス 'anotherclass' を追加する必要がある場所である外側の$('#container a .someclass')アンカー:に戻ります。.parents('a')

于 2012-12-05T12:31:23.263 に答える
2
jQuery('#container a .someclass').parent().addClass('anotherclass');​
于 2012-12-05T12:26:28.103 に答える