2012-09-27 111 views
2

我觉得我应该可以在这里使用:not(:first-child)选择器,但它看起来并不像我所希望的那样工作。jQuery选择器 - 除第一个标签和输入之外的所有元素?

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(); 
});​ 

更新:正是这样很明显,我hopng第一胎选择会寻找已匹配元素的第一个孩子。也就是说,我希望它选择所有不是第一个输入的输入,并且类似于标签。不幸的是,它与OrdersSearchResult的子元素的第一个子元素匹配,无论应用了其他过滤器。

+2

那么你要删除什么? – VisioN

+0

在所示的例子中,什么都不应该被删除。我希望这两个选择器不能删除任何东西。不幸的是,第一胎儿选择器会查看整个元素集合,而不是已经匹配的元素集合。 –

+0

它正在工作,因为它应该 - 它删除'不是第一个孩子的标签' – wroniasty

回答

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(); 
});​ 
+0

我认为这是赢家。 :) –

+0

我也这么认为。我实际上忘记了':gt()'和':lt()'。超级有用。 – iambriansreed

1

所以你已经删除了你的小提琴中的非第一个子元素:标签。

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

+0

这是我想要的,但我希望不必将我的内容包裹在一个div中。但是,如果没有什么比这更简单的话,我会接受一些。 :) –

2

做到这一点,对标签和输入:

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

或许:

$($('#OrdersSearchResult > label').toArray().shift()).remove(); 
+0

这是...哇! :) – VisioN

+0

是真的吗?哇, – wroniasty

+2

是的,':gt(0)'是我会用,如果我知道它存在 – wroniasty

1

的选择:第一个孩子让你选择的第一个孩子特定节点。

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

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

相关问题