与jQuery find()相反,是不是()?

时间:2012-09-25 22:15:08

标签: jquery

鉴于以下HTML,jQuery选择器会选择最后一个'blah blah'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")')

但是没有这样做。我错过了什么?

5 个答案:

答案 0 :(得分:6)

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

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

这是working example

您需要这样做的原因是.d1 span a span将匹配第一个span元素中a元素的 {/ em> .d1个后代。 .not()调用将排除外部调用,但内部调用仍将是匹配集的一部分。通过添加子组合子,仅选择外部span,然后通过调用.not()删除。

答案 1 :(得分:2)

如果我正确理解你的问题,你需要这个选择器:

$('div.d1 span:last')

小提琴展示它的实际效果:http://jsfiddle.net/aWCsT/

答案 2 :(得分:1)

仅选择span的孩子a

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

演示:http://jsfiddle.net/Blender/eSDrK/1/

答案 3 :(得分:1)

试试这个:

$('.dl:last span:not(:has(*))')

答案 4 :(得分:0)

<强> demo jsbin

$('a>span:not(:first)')