3

この HTML (異なる場合があります) がページのどこかにある場合:

<div id="start">
<div>
    <div class="buttons">select this</div>
    <div class="myControl">
        <div class="buttons">dont select this</div>
    </div>
    <div>
        <div class="buttons">select this</div>
    </div>
</div>
</div>​

buttonsすべての要素をクラスredでマークしたい:

$('#start').find('.buttons').css('color','red');​

しかし、それらが の中にある場合はそうではないmyControlので、「これを選択」の div だけが赤くなるはずです。

疑似コードでは、セレクターは次のようになります

クラス「ボタン」を持つすべての要素を取得しますが、クラス「myControl」を持つ要素のすべてを無視します

ここで jsfiddleを用意しました。


編集

開始 div に「myControl」クラスも含めることができるという事実に気づいていなかったので (プロジェクトからコードを可能な限り取り除いて読みやすくしようとしました)、実際には次のようになります (そして完全なブロックは、myControl を使用してより多くの div にネストすることもできます)。

残念ながら、(私の元の質問に対して正しい)回答はその状況では機能しません。申し訳ありません!これを解決するために答えの1つを微調整する方法はありますか?

<div class="myControl" id="start">
<div>
    <div class="buttons">select this</div>
    <div class="myControl">
        <div class="buttons">dont select this</div>
    </div>
    <div>
        <div class="buttons">select this</div>
    </div>
</div>
</div>​

ここに新しい jsfiddle があります


解決

したがって、最終的な解決策は次のとおりです。

$('#start').find('.buttons:not("#start div.myControl div.buttons ")')
.css('color','red');​
4

3 に答える 3

7

.not を使用できます

 $('#start').find('.buttons:not("div.myControl > div.buttons ")').css('color','red');​

jsfiddle

http://jsfiddle.net/QqRuV/3/

于 2012-10-09T08:51:44.853 に答える
2
$('#start').find('.buttons').filter(function(e) { return $(this).parent(".myControl").length < 1; }).css('color','red');​
于 2012-10-09T08:55:56.740 に答える
0
$('#start').children('.buttons').css('color', 'red')
于 2012-10-09T08:53:01.230 に答える