我记得这个问题很长一段时间了。
理论上,jQuery核心函数接受一个可选值,该值可以是DOM元素 - $(".searched",$("#context")[0])
- 或jQuery对象 - $(".searched",$("#context") )
。
我发现最后一个问题看起来很好article。
但我真的看不出使用上下文和传递更复杂的css表达式之间的区别。如果它的工作方式没有区别,是否有任何性能差异?
由于
答案 0 :(得分:3)
它会被转换为DOM元素(在Sizzle中,在上下文部分中),以便在您的任何一个案例中搜索ultimately doing一个.find()
。
如果你担心性能(为什么不尽可能快?),你应该使用它:
$("#context .searched")
此版本gets converted back into a jQuery object:
$("#context")[0]
所以它在jquery方面有点慢,因为它必须在<{em> .find()
调用之前包装在jquery对象中,性能差异非常小,但它是唯一的差异所以我注意到了:)
答案 1 :(得分: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)
表单来搜索包含的元素。
答案 2 :(得分:0)
可读性:像$("#context .searched")
这样的CSS选择器比其他选择器更具可读性。