4

给定以下 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")')

但这并没有。我错过了什么?

4

5 回答 5

6

如果我正确理解了您的问题,那么您所缺少的只是一个子组合器:

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

这是一个工作示例

你需要这个的原因是.d1 span a span它将匹配第一个元素中元素的两个 span后代。该调用将排除外部的,但内部的仍将是匹配集的一部分。通过添加子组合器,仅选择了外部组合器,然后通过调用将其删除。a.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仅选择that的孩子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 回答