72

私は持っています

var $set = $('.foo,.bar').filter(
    function() {return $(this).parents('.baz').length < 1;});

クラスがまたはであり、クラスが。である要素の子孫ではないfooすべての要素を選択する方法として。フィルタリングラムダを必要とせずに同じことを達成するセレクターはありますか?barbaz

<div class='foo'/><!--match this-->
<div class='bar'/><!--match this-->
<div class='baz'>
    <div class='foo'/> <!--don't match this-->
</div>
4

7 に答える 7

80

問題の真実は、jQueryにはあなたが望むことをするための特にエレガントな方法がないということです。カオスの答えは機能しますが、複雑なセレクター(複雑なWebページでセレクターを使用できるのと同じくらい遅い)が、より冗長で高速なフィルター機能よりも価値があるかどうか疑問に思う必要があります。これはそれほど大したことではありません。私はそれを避けることができるとき、特に長くて複雑なセレクターに個人的にうんざりしています。

jQueryは素晴らしいので、別のオプションは独自のセレクターを作成することです。

jQuery.expr[':'].parents = function(a,i,m){
    return jQuery(a).parents(m[3]).length < 1;
};

$('.foo,.bar').filter(':parents(.baz)');

exprマップはSizzleセレクターエンジンの一部であり、ドキュメントはここにあります:Sizzleカスタム疑似セレクター

于 2009-06-08T17:13:25.907 に答える
31
$('.foo:not(.baz .foo),.bar:not(.baz .bar)')
于 2009-06-08T16:44:14.647 に答える
18

これを機能させることができませんでした:

$(".children:not(#parent .children)");

しかし、私はこれを機能させることができます:

$(".children").not($("#parent .children"));

注:これが1.2.6を使用しているjQueryバージョンと関係があるかどうかはわかりません

于 2009-09-28T05:12:53.980 に答える
4

これを試してください:

$('div').filter(function () {
  return ($(this).parent().not('.baz'));
})
于 2013-04-02T20:47:08.193 に答える
1

セレクターカオスが与えるものは機能するはずです:

$('.foo:not(.baz .foo),.bar:not(.baz .bar)')

css/jqueryセレクターのテストに使用できるFireFinderと呼ばれるFireBugの拡張機能に関するヒントを提供したいと思います。

Webサイトから:FirefinderはFirebug(Firefoxの場合)の拡張機能であり、選択したCSSセレクターまたはXPath式に一致するHTML要素をすばやく見つける機能を提供します。これにより、コンテンツを同時に表示しながら、ページ内のCSSセレクターを即座にテストでき、一致する要素が強調表示されます。

于 2009-06-08T16:59:49.793 に答える
1

var $li = jQuery('li', this).not('.dropdown-menu > li');

Rootsテーマを使用していますが、ドロップダウンが「サブメニュー」から「.dropdown-menu」に変更されています。

于 2012-08-24T20:19:03.223 に答える
0

:not('。baz')をトップレベルセレクターに追加します。

于 2009-06-08T16:44:23.540 に答える