拥有以下html代码段
<div class="something">
<p>Some text</p>
</div>
<div class="somethingElse">
<p>some other text</p>
</div>
我认为以下jquery片段是相同的(将具有相同的结果):
$(".something").find("p").css("border", "1px solid red");
$("p", ".something").css("border", "1px solid red");
我的问题是,一个代码段是否优于另一个代码段并且应该使用
答案 0 :(得分:63)
电话不一样。
根据显然从事jQuery工作的Brandon Aaron,以及根据实时测试here,find方法总是更快。请参阅下面屏幕截图中的结果。如果我错过了什么,请评论。
速度差异为10%或更大,取决于浏览器,看起来绝对值得使用find。
Brandon网站上的进一步解释是here。
答案 1 :(得分:22)
两个电话都是相同的。后一种呼叫被翻译成前者。如果要省略转换步骤,请使用前一步。
答案 2 :(得分:10)
我可以想到一个使用context
形式的用例可能更好 - 在上下文包含在可能为null的变量中的情况下。
例如:
// Only affect matching items that are descendants of '#parent'
do_something( $( '#parent' ) );
// Affect all matching items
do_something();
function do_something( $parent_element ){
$( '.child', $parent_element ).each( function(){ } );
}
第二次调用do_something()
时,如果我们使用$parent_element.find()
它将失败,而在此示例中,如果$parent_element
未定义或为空,则上下文为空,因此:整个文件。
不可否认,这是一个边缘案例,但它只是出现在我正在研究的东西上,所以我想把它放在这里供后人使用。
答案 3 :(得分:7)
查找更好,40%:
http://jsperf.com/jquery-find-vs-context-2/13
注意区别:
$myDiv = $("myDiv")
myDiv = "#myDiv"
传递$myDiv
时,jQuery元素作为上下文,比$ .find慢约10%。
传入#myDiv
时,jQuery选择器作为上下文,比$ .find慢40%。
$。找到&gt;上下文。