在回答以下jQuery问题Need help in Optimizing the below jquery code的过程中,我偶然发现了另一个关于.find()
和.children()
的问题。
问题是,给出了四个选择框,其中包含ID 状态,城市,分支, 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没有的情况下工作,我会很高兴。
答案 0 :(得分:6)
所有其他答案都是正确的,但我认为文档中的重要部分解释了为什么示例1失败以及为什么数字3有效,而.children()
有效地过滤了前一个选择器的结果{{1}我将执行selector-context搜索,因此(我假设)它将在所有4个上下文中执行.find()
搜索并整理结果,而'option:not(:first)'
将首先整理结果,然后使用{进行过滤{1}}有效地删除了除第一个之外的所有内容......
在这种情况下,搜索的深度无关紧要。
答案 1 :(得分:4)
来自文档:.children():
.children()方法与.find()的区别仅在于.children() 在.sind()可以遍历时沿DOM树向下移动一个级别 在多个级别选择后代元素(孙子, 等)。