这个问题我已经想了很久了。
从理论上讲,jQuery核心函数接受一个可选值,该值可以是DOM元素- $(".searched",$("#context")[0]) -或jQuery对象- $(".searched",$("#context") )。我在读那个漂亮的article时发现了最后一个问题。
但是我真的看不出使用上下文和传递一个更复杂的css表达式之间的区别。如果它的工作方式没有区别,那么性能有什么区别吗?
谢谢
发布于 2010-08-27 01:26:39
主要区别在于$(".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)表单来搜索包含的元素。
发布于 2010-08-27 01:13:36
它被转换为一个DOM元素(在Sizzle中是上下文部分),以便在您的任一案例中进行搜索,在幕后执行ultimately doing a .find()。
如果你关心的是性能(为什么不尽可能快一点呢?),你应该使用下面的代码:
$("#context .searched")此版本的gets converted back into a jQuery object
$("#context")[0]所以它在jquery方面有点慢,因为它必须在.find()调用之前包装在一个jquery对象中,这种性能差异非常小,但这是唯一的区别,所以我注意到了:)
发布于 2010-08-27 01:17:23
可读性:像$("#context .searched")这样的CSS选择器比其他选择器更具可读性。
https://stackoverflow.com/questions/3577567
复制相似问题