结合使用时,find()和children()之间的jQuery区别为:first

在回答以下jQuery问题的过程中需要帮助优化下面的jquery代码 ,我偶然发现了另一个关于.find().find()问题。

问题是,给定了四个带有ids statecitybranchbranchAddress的选择框,除去每个选择框的第一个选项。

已经发布了几个答案。 其中包括:

  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没有的情况下工作,我会很高兴。

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

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

来自docs: .children() :

.children()方法与.find()的不同之处在于.children()只沿DOM树向下移动一个级别,而.find()可以遍历多个级别以选择后代元素(孙子等)。