2

我觉得我应该可以在这里使用 :not(:first-child) 选择器,但它似乎不像我希望的那样工作。

http://jsfiddle.net/39KZ9/6/

我希望标签仍然出现。我怎样才能简单地做到这一点?

<div id="OrdersSearchResult">
    <input type="radio" id="SearchResultsLink" name="SearchResultNavigation" checked="checked"/>
    <label id="SearchResultsLinkLabel" for="SearchResultsLink">Search Results</label>
</div>​

$(document).ready(function(){
    $('#OrdersSearchResult').children('label:not(:first-child)').remove();
    $('#OrdersSearchResult').children('input:not(:first-child)').remove();
});​

更新:很清楚,我很高兴第一个孩子选择器会寻找已经匹配元素的第一个孩子。也就是说,我希望它选择所有不是找到的第一个输入并且与标签类似的所有输入。不幸的是,无论是否应用了其他过滤器,它都匹配 OrdersSearchResult 的子元素的第一个子元素。

4

4 回答 4

2

对标签和输入执行此操作:

var labels = $('#OrdersSearchResult > label').toArray();
labels.shift();
$(labels).remove();

或许:

$($('#OrdersSearchResult > label').toArray().shift()).remove();
于 2012-09-27T23:13:25.943 回答
2

http://jsfiddle.net/39KZ9/16/

$(document).ready(function(){
    $('#OrdersSearchResult').children('label:gt(0)').remove();
    $('#OrdersSearchResult').children('input:gt(0)').remove();
});​

使用大于选择器。

:gt(0)基本上说项目大于第一个,因为索引0是第一个。

http://api.jquery.com/gt-selector/

顺便说一句,:first-child返回父元素的第一个子元素,而不是一组元素中的第一个子元素。

更简单:

$(document).ready(function(){
    $('#OrdersSearchResult').children('label:gt(0),input:gt(0)').remove();
});​
于 2012-09-27T23:15:44.783 回答
1

因此,您已经删除了小提琴中的非第一个子元素:标签。

我想你想删除包含输入和标签的非第一个字段组。在这种情况下,请查看http://jsfiddle.net/39KZ9/8/

于 2012-09-27T23:07:02.277 回答
1

选择器 :first-child 让您选择特定节点的第一个子节点。

在您的代码中,第一个孩子是第一个输入。所有其他节点都不是第一个子节点,因此,它将被您的 jQuery 调用删除。

为了解决您的问题,您必须将每对输入和标签分组到一个容器中(<p>, <div>, ...),并在这些容器上应用 jQuery 调用。

于 2012-09-27T23:14:11.410 回答