4

次のHTMLを考えると、どのjQueryセレクターが最後の「何とか何とか」を選択しますspanが、最初は選択しませんか?

<div class='d1'>
  <span>
    <a>blee
      <span> <!-- don't select this span -->
        <span>blah</span> blah
      </span>
    </a>
  </span>
</div>

<br/>

<div class='d1'>
  <span>
    <a>blee
      <span> <!-- select this span -->
        blah blah
      </span>
    </a>
  </span>
</div>

not()を使用してバリエーションを試しましたが、理解できません。私が必要としているのは、最初のスパンを見つけるセレクターですが、別のスパンが含まれている場合はそれを除外するようです。何かのようなもの:

$('.d1 span a span').not(':has("span")')

しかし、それはそれをしません。私は何が欠けていますか?

4

5 に答える 5

6

私があなたの質問を正しく理解しているなら、あなたが見逃しているのは子コンビネータだけです:

$('.d1 span a > span').not(':has("span")')

これが実際のです。

これが必要な理由は、最初の要素の要素の両方の子孫に.d1 span a span一致するためです。呼び出しは外側のものを除外しますが、内側のものは引き続き一致したセットの一部になります。子コンビネータを追加すると、アウターのみが選択され、への呼び出しによって削除されます。 spana.d1.not()span.not()

于 2012-09-25T22:18:57.020 に答える
2

私があなたの質問を正しく理解しているなら、あなたはこのセレクターが欲しいです:

$('div.d1 span:last')

実際の動作を示すフィドル:http://jsfiddle.net/aWCsT/

于 2012-09-25T22:19:00.227 に答える
1

その子のみを選択spanしてくださいa

$('.d1 span a > span:not(:has(span))')

デモ: http: //jsfiddle.net/Blender/eSDrK/1/

于 2012-09-25T22:20:04.263 に答える
1

これを試して:

$('.dl:last span:not(:has(*))')
于 2012-09-25T22:21:44.697 に答える
0

デモjsbin

$('a>span:not(:first)')
于 2012-09-25T22:26:39.963 に答える