jquery查找与上下文选择

时间:2010-02-26 14:34:02

标签: jquery jquery-selectors

拥有以下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");

我的问题是,一个代码段是否优于另一个代码段并且应该使用

4 个答案:

答案 0 :(得分:63)

电话不一样。

根据显然从事jQuery工作的Brandon Aaron,以及根据实时测试here,find方法总是更快。请参阅下面屏幕截图中的结果。如果我错过了什么,请评论。

速度差异为10%或更大,取决于浏览器,看起来绝对值得使用find。

Brandon网站上的进一步解释是here

Results of performance comparison between jQuery context and jQuery find method

答案 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;上下文。