10

我只想选择与 X 类匹配的元素,并且没有任何同级也具有 X 类的元素。在我的情况下,X = hasDatepicker. 这是我想出的:

$('.hasDatepicker:not(.hasDatepicker ~ .hasDatepicker)')

但是,这并不排除第一个元素,因此在任何一组日期选择器中,这仍然会选择第一个元素。我不想包括任何在一个组中,只有单打。

1场比赛的示例:

<div class="input text">
<input name="data[Goal][date_started]" type="text" value="" class="hasDatepicker" style="display: none; ">
<button type="button" class="ui-datepicker-trigger"><img src="/themed/mocha/images/btn_calendar.png" alt="..." title="..."></button>
</div>

匹配0次的示例:

<div class="input text">
<input type="text" value="" id="GoalDateStarted" class="hasDatepicker"><input type="text" value="" class="hasDatepicker" style="display: none; ">
<input type="text" value="" class="hasDatepicker" style="display: none; ">
<input name="data[Goal][date_started]" type="text" value="" class="hasDatepicker" style="display: none; ">
<button type="button" class="ui-datepicker-trigger"><img src="/themed/mocha/images/btn_calendar.png" alt="..." title="..."></button>
</div>

有任何想法吗?谢谢!

4

1 回答 1

8

它不是那么优雅,但它使用:first-child伪选择器并使用.filter()过滤结果集来解决问题:

  • :first-child将有助于仅选择可能的多个同级列表中的第一个 .test 元素

  • 用于.filter()实际检查是否没有同级的兄弟姐妹

这是代码:

var a = $('.test:first-child').filter(function() {
    //return $(this).parent().find('.test').not(this).length == 0;
    return !$(this).siblings('.test').length
});

演示

于 2012-04-13T18:29:17.877 回答