Javascript amout')并不总是像$('.iamin')
并非所有浏览器都支持按类名选择(本机),但现代/更新的浏览器支持按类名选择,因此根据您使用的浏览器,它可能提供更好的性能Javascript amout')并不总是像$('.iamin'),javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,并非所有浏览器都支持按类名选择(本机),但现代/更新的浏览器支持按类名选择,因此根据您使用的浏览器,它可能提供更好的性能 如果您需要获得最佳性能,则需要测试准确的页面。ID是唯一的,如果您只想在此处选择一个/第一个元素,则需要选择等效元素 $(“#someid”)=>75695次/秒,最快 $(.unique_class')=>45257次/秒,速度慢40%:页面上只有一个类 $(“.someclass”).first()=>42217次/秒,速度慢46%:页面上有多个类,选择第一个元素 $(“
如果您需要获得最佳性能,则需要测试准确的页面。ID是唯一的,如果您只想在此处选择一个/第一个元素,则需要选择等效元素 $(“#someid”)=>75695次/秒,最快 $(.unique_class')=>45257次/秒,速度慢40%:页面上只有一个类 $(“.someclass”).first()=>42217次/秒,速度慢46%:页面上有多个类,选择第一个元素 $(“.someclass:eq(0)”)=>18324次/秒,速度慢76%:页面上有多个类,在选定索引处选择元素
测试url:我想这部分是正确的,但是按类选择也会映射到getElementsByClassName,对吗?实际上,
#id.class
语法没有帮助。如果希望获得任何性能优势,应该使用可选的上下文参数。是的,它映射到getElementsByClassName,但不在IE6-8中。Firefox、Opera、Safari和Chrome都支持它。这绝对是正确的答案,因为它利用了querySelectorAll()方法的用法,并且比$(“.someclass”,“#somecontainer”)快得多,不像大家相信的那样黑白分明:类和属性看起来不相上下。我很惊讶(并做出了假设)当我测试我的页面时,我发现一些选择结构的性能不如我实际页面上的其他结构。我现在测试更多:)我正要问同样的问题,你为我节省了一些时间。如果我希望该类中的每个元素,无论它位于何处,该怎么办?(更现实地说,body
中的每一个这样的元素,但解决方案是向body
?)添加一个ID),然后去掉上下文参数。我只是简单地提到它,因为我觉得它经常被遗忘。我还没有在主体上测试ID,但我认为这不会有多大帮助。事实上,我在一些复杂的页面中发现,一个div中的类假设并不总是最有效的。@Mark-Wow。你说得对。事情在几年内发生的变化令人惊讶。你可以在上面看到我的结果。@Steve Wortham:测试很好。现代浏览器有IE 8+、Chrome、Safari和Firefox。对于css来说,属性选择也很重要(因为有属性选择器),所以它也是优化的。
$("#someid")
$(".someclass")
$("[someattr='value']")
$("#someid .someclass")
$(".someclass", "#somecontainer")
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
startTime = new Date().getTime();
for (i = 0; i < 10000; i++)
{
s = $(".someclass");
}
$("#withoutcontext").html(elapsedMilliseconds(startTime));
startTime = new Date().getTime();
for (i = 0; i < 10000; i++)
{
s = $(".someclass", "#somecontainer");
}
$("#withcontext").html(elapsedMilliseconds(startTime));
});
function elapsedMilliseconds(startTime)
{
var n = new Date();
var s = n.getTime();
var diff = s - startTime;
return diff;
}
</script>
</head>
<body>
<h1>jQuery Selector Performance: Context vs No Context</h1>
<h2>$(".someclass")</h2>
<span id="withoutcontext">---</span> ms<br /><br />
<h2>$(".someclass", "#somecontainer")</h2>
<span id="withcontext">---</span> ms<br /><br />
<hr />
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<div id="somecontainer">
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="someclass">someclass</p>
</div>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
</body>
</html>
<div id='iamout'>
<div class='aonther'>
<div class='iamin'>stuff</div>
<div class='iamin'>stuff</div>
</div>
</div>