jQuery find()的反面是不是()?

mix*_*mix 4 jquery

鉴于以下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>
Run Code Online (Sandbox Code Playgroud)

我尝试过使用not()的变体,但无法弄明白.看起来我需要的是一个找到第一个跨度的选择器,但如果它包含另一个跨度则排除它.就像是:

$('.d1 span a span').not(':has("span")')
Run Code Online (Sandbox Code Playgroud)

但那不行.我错过了什么?

Jam*_*ice 6

如果我理解你的问题,那么你所缺少的就是一个儿童组合子:

$('.d1 span a > span').not(':has("span")')
Run Code Online (Sandbox Code Playgroud)

这是一个有效的例子.

你需要这个的原因是.d1 span a span它将匹配第一个元素中元素的两个 span后代.该调用将排除外部调用,但内部调用仍将是匹配集的一部分.通过添加子组合子,只选择外部,然后通过调用删除.a.d1.not()span.not()

  • 我正在选择这个,因为它解释了我对子选择器的需求. (2认同)