结合使用时,find()和children()之间的jQuery区别为:first
在回答以下jQuery问题的过程中需要帮助优化下面的jquery代码 ,我偶然发现了另一个关于.find()
和.find()
问题。
问题是,给定了四个带有ids state , city , branch , branchAddress的选择框,除去每个选择框的第一个选项。
已经发布了几个答案。 其中包括:
-
$('#state,#city,#branch,#branchAddress').children('option:not(:first)').remove();
-
$('#state,#city,#branch,#branchAddress').children('option:not(:first-child)').remove();
-
$('#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()可以遍历多个级别以选择后代元素(孙子等)。