我很长一段时间都在想这个问题。
理论上,jQuery核心函数接受一个可选值,该值可以是DOM元素 - $(".searched",$("#context")[0])
- 或jQuery对象 - $(".searched",$("#context"))
。 我发现最后一个问题读得那么好article。
但我真的不能看到使用上下文和传递更复杂的CSS表达式之间的区别。如果它的工作方式没有什么不同,是否有任何性能差异?
由于
我很长一段时间都在想这个问题。
理论上,jQuery核心函数接受一个可选值,该值可以是DOM元素 - $(".searched",$("#context")[0])
- 或jQuery对象 - $(".searched",$("#context"))
。 我发现最后一个问题读得那么好article。
但我真的不能看到使用上下文和传递更复杂的CSS表达式之间的区别。如果它的工作方式没有什么不同,是否有任何性能差异?
由于
主要区别在于$(".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)
表单来搜索包含的元素。
它得到的封面下转化成DOM元素(在灒,上下文部分)中的任一种的情况下进行搜索,ultimately doing一个.find()
。
如果你关心性能(为什么不是尽可能快?),你应该使用这个代替:
$("#context .searched")
这个版本gets converted back into a jQuery object:
$("#context")[0]
所以这在jquery方面有点慢,因为它必须被包装在调用之前的jQuery对象中,该性能差异非常小,但这是唯一的区别,所以我注意到它:)
可读性:像$("#context .searched")
这样的CSS选择器比其他更可读。
这完全解决了我的问题。只有当我必须将其存储用于其他目的时,我才会使用上下文。我发现$('#context')。find('。searching')更自然,所以也许我不会再使用上下文语法。 – Cibernox 2010-08-26 19:23:18