遵循不同的jQuery选择方式有什么区别。对我来说,他们似乎采用不同的方式做同样的事情同样的性能成本:
$("#list li").hover(function () {
$(this).addClass("red");
}, function (){
$(this).removeClass("red");
});
大于符号:
$("#list > li").hover(function () {
$(this).addClass("red");
}, function (){
$(this).removeClass("red");
});
立即添加上下文:
$("li", $("#list")).hover(function () {
$(this).addClass("red");
}, function (){
$(this).removeClass("red");
});
答案 0 :(得分:5)
#list li
找到相同的元素集,但在现代浏览器中,它可以将整个选择器传递给浏览器的选择器引擎,因此它可能更多更快。
#list > li
查找<{> 1}}的立即子项的所有li
个元素,即#list
但不<ul id="list"><li>
<div id="list"><ul><li>
创建一个包含匹配$("li", $("#list"))
的元素的jQuery对象,然后创建一个包含具有上下文#list
的所有li
元素的新元素,即所有{位于#list
内的{1}}元素。它不是真的可读,所以不要使用它。
还有其他方法:
li
等于#list
$('#list').children('li')
等于$('#list > li')
这两种情况都不能使用原生$('#list').find('li')
的速度优势,因此除了更具可读性之外,它们与$('#list li')
答案 1 :(得分:1)
他们是不同的:
#list li
指的是#list
的后代的任何列表项。这与$("li", $("#list"))
#list > li
引用任何列表元素,它是#list
的直接子元素(而不是孙子元素等)。
答案 2 :(得分:0)
"#list li"
和$("li", $("#list"))
:#list中的所有li元素,包括儿童,孙子......
"#list > li"
:只有#list的孩子们。