结合使用时,find()和children()之间的jQuery差异:first

时间:2012-12-03 16:13:30

标签: jquery jquery-selectors

在回答以下jQuery问题Need help in Optimizing the below jquery code的过程中,我偶然发现了另一个关于.find().children()的问题。

问题是,给出了四个选择框,其中包含ID 状态城市分支 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();
  4. 解决方案1似乎不起作用(删除除第一个选择框的第一个选项之外的所有选项)根据此js小提琴(http://jsfiddle.net/QkNRf/1/

    解决方案2和3似乎完美无缺。

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

2 个答案:

答案 0 :(得分:6)

所有其他答案都是正确的,但我认为文档中的重要部分解释了为什么示例1失败以及为什么数字3有效,而.children()有效地过滤了前一个选择器的结果{{1}我将执行selector-context搜索,因此(我假设)它将在所有4个上下文中执行.find()搜索并整理结果,而'option:not(:first)'将首先整理结果,然后使用{进行过滤{1}}有效地删除了除第一个之外的所有内容......

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

答案 1 :(得分:4)

来自文档:.children()

  

.children()方法与.find()的区别仅在于.children()   在.sind()可以遍历时沿DOM树向下移动一个级别   在多个级别选择后代元素(孙子,   等)。