3

すべてのセレクターがすべて同じ先祖要素を持つ状況があります

$('#foo .bar')...
$('#foo .some_class')...
$('#foo .some_other_class')...

セレクターがから派生すると常に仮定するようにjQueryに指示する方法があるかどうか疑問に思っていました#fooか? だから何か

$.ancestorWillAlwaysBe('#foo');
$('.bar')...
$('.some_class')...
$('.some_other_class')...
4

5 に答える 5

4
$ancestor = $("#foo");
$$ = function(arg) {
    return $(arg, $ancestor);
}

$$('.bar').html("descendant of foo");

$ancestor.find('.bar')個人的には、コードをわかりやすくするために、次のようなものを使用します。

于 2012-06-23T18:52:13.340 に答える
4

これらすべてを入力するのが面倒なようです#foo。これをより簡単な方法で行う方法を次に示します。

var e = $("#foo");  //short enough
$('.bar', e);
$('.some_class', e);
$('.some_other_class', e);

または、本当に怠惰な場合は、次のことができます。

$ = function(que, anc){
    if($.ancestor){
        return jQuery(que, $.ancestor);
    }else{
        return jQuery(que, anc);
    }
}

$.ancestor = "#foo";  //Ancestor will now always be #foo
$('.bar')...
$('.some_class')...
$('.some_other_class')...
$.ancestor = undefined;  //Clear

デモ: http://jsfiddle.net/DerekL/agnHy/

于 2012-06-23T18:59:45.167 に答える
3

あなたが求めていることを正確に行う簡単な方法はありませんが、それを見つけることができます:

var $foo = $('#foo');

その後:

var others = $foo.find('.bar');

可能な場合は、セレクターの右端でタグ名を使用することをお勧めします (最近のブラウザーでのセレクターの解釈は非常に高速であるため、最適化を行う価値はあまりありません)。したがって:

var others = $foo.find('span.bar');

もちろん、関連する要素の種類を簡単に絞り込めない場合など、これが望ましくない場合もあります。

編集— キャッシュされた jQuery の結果に「$」で始まる名前を付ける規則は、まさに規則です。それは必要ではなく、不快だと思う人には同情します:-)

于 2012-06-23T18:31:56.203 に答える
3

私は少し怠け者で、おそらく関数を作成するだけです:

function a(elem) {
    return $('#foo').find(elem);
}

次のように使用します。

a('.bar').css('color', 'red');

フィドル

または、 #foo 内にないものを除外する式を作成するだけです。それはおそらくあなたが求めているものだからです。それ以外の場合は、クラスをターゲットにするだけで問題ありません

$.extend($.expr[":"], {  
    foo: function(elem){  
         return $(elem).closest('#foo').length;  
    }  
}); 

そして、やります:

$('.bar:foo').css('color', 'red');

フィドル

于 2012-06-23T19:25:04.733 に答える
0

私はあなたがどちらかを探していると思います

Child Selector (“parent > child”)

「親」で指定された要素の「子」で指定されたすべての直接の子要素を選択します

また

:first-child Selector

親の最初の子であるすべての要素を選択します。

于 2012-06-23T18:42:32.173 に答える