$(“#context .searched”)和$(“。searching”,$(“#context”))之间有什么区别?

时间:2010-08-26 17:08:57

标签: javascript jquery

我记得这个问题很长一段时间了。

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

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

由于

3 个答案:

答案 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选择器比其他选择器更具可读性。