2010-08-26 76 views
3

我很长一段时间都在想这个问题。

理论上,jQuery核心函数接受一个可选值,该值可以是DOM元素 - $(".searched",$("#context")[0]) - 或jQuery对象 - $(".searched",$("#context"))。 我发现最后一个问题读得那么好article

但我真的不能看到使用上下文和传递更复杂的CSS表达式之间的区别。如果它的工作方式没有什么不同,是否有任何性能差异?

由于

回答

2

主要区别在于$(".searched", context);也可以将变量作为上下文。它实际上在做$(context).find('.searched');,我认为第二个版本无论如何都更易读,所以我通常使用它。

这种情况的使用是这样的:

$.fn.highlightSearch = function() { 
    return this.each(function() { 
    $('.searched', this).addClass('highlighted'); 
    // the commented line performs the same thing: 
    // $(this).find('.searched').addClass('highlighted'); 
    }); 
}; 

$('#context').highlightSearch(); 
$('.somethingElse').highlightSearch(); 

请注意,在这种情况下,你不能简单地在原有的末尾添加新的选择。

如果您没有其他理由持有$('#context')的副本,那么使用$('#context .searched')会更快更简单。但是,如果您已将$('#context')存储在变量中,则最好使用.find(select)$(selector, context)表单来搜索包含的元素。

+0

这完全解决了我的问题。只有当我必须将其存储用于其他目的时,我才会使用上下文。我发现$('#context')。find('。searching')更自然,所以也许我不会再使用上下文语法。 – Cibernox 2010-08-26 19:23:18

3

它得到的封面下转化成DOM元素(在灒,上下文部分)中的任一种的情况下进行搜索,ultimately doing一个.find()

如果你关心性能(为什么是尽可能快?),你应该使用这个代替:

$("#context .searched") 

这个版本gets converted back into a jQuery object

$("#context")[0] 

所以这在jquery方面有点慢,因为它必须被包装在调用之前的jQuery对象中,该性能差异非常小,但这是唯一的区别,所以我注意到它:)

0

可读性:像$("#context .searched")这样的CSS选择器比其他更可读。

相关问题