2012-12-03 25 views
4

在回答以下jQuery问题Need help in Optimizing the below jquery code的过程中,我偶然发现了另一个关于.find().children()的问题。jQuery与find()和children()结合使用时的区别:第一个

的问题是,授予了四种selectboxes与IDS 状态城市分支branchAddress,删除所有,但每一个选择框的第一个选项。

已经发布了几个答案。在这些有:

  1. $('#state,#city,#branch,#branchAddress').children('option:not(:first)').remove();
  2. $('#state,#city,#branch,#branchAddress').children('option:not(:first-child)').remove();
  3. $('#state,#city,#branch,#branchAddress').find('option:not(:first)').remove();

解决方案1似乎不工作(删除所有的选项,除了第一个选择框的第一个选项)根据本js小提琴(http://jsfiddle.net/QkNRf/1/

解决方案2和3似乎完美地工作。

如果有人能够指出我错过了什么,或者向我解释为什么解决方案3在解决方案1不适用的情况下工作,我会很高兴。

回答

6

所有其他的答案是正确的,但我认为这可以解释为什么例1失败,为什么3号作品是,虽然.children()有效地过滤来自先前选择的结果,.find()将执行selector-context搜索文档的重要组成部分,所以(我认为),它会执行所有4个上下文的'option:not(:first)'搜索和整理结果,而.children()会先整理结果,然后筛选使用'option:not(:first)'有效地消除所有,但第一个...

的深度搜索在这种情况下是无关紧要的。

+0

这是正确答案,请参阅:http://jsfiddle.net/QkNRf/2/ –

+1

thx也@roasted!我想.children()文件有点误导。大多数人似乎认为与.find()唯一的区别在于搜索深度。 – jbl

4

从文档:.children()

()方法从.find()在不同。儿童()只 行进的单一电平向下DOM树而.find的。儿童()可以遍历 向下多个层次选择后代元素(孙, 等)以及。

+0

thx为您的答案。但我的例子是关于选择框和它们的选项,所以不能超过一个级别。为什么解决方案1和解决方案3有区别? (解决方案1在解决方案3中不起作用)。他们只是在发现/孩子不同。 – jbl

相关问题