Using jQuery object understanding
我不得不跳进jQuery开发而没有花太多时间学习所有相关的基础知识,所以有一件事让我失望了很多。
我看到开发人员访问jQuery对象的两种不同方式:
情况1:
1 2 3 4 | var container = $("#containerId"); // Then use it as: container.hide(); |
案例2:
1 2 3 4 | var container = $("#containerId"); // Then use it as: $(container).hide(); |
从我的最新知识,通过在
但是,为什么我在
编辑:建议重复的问题是询问最佳实践,尽管类似,我的问题纯粹是对jQuery对象包装的理解。
我记得第二次包装什么也没做。因此,如果可以有一个选择器,一个dom元素或一个jQuery对象,你可以将它包装起来而不关心它是什么。
但是如果你知道它是一个jquery对象,你就不应该使用包装。
当开发人员开发一个函数时,例如在jQuery插件中,可以获得一个DOM元素或jQuery对象或选择器的参数,然后他们使用它:
1 2 3 4 5 6 7 8 9 | function x(container) { container = $(container); // use container as a jquery object } // these both work: x("#containerId"); x($("#containerId")); x(document.getElementById("containerId")); |
情况1:
使用jQuery选择器查找dom元素并返回jQuery对象:
1 2 3 4 | var container = $("#containerId"); // Then use it as: container.hide(); |
案例2:冗余/错误(或者如果你不确定变量是否已经是一个jQuery对象,但你需要它):
使用jQuery选择器查找dom元素并返回jQuery对象,然后将其传递给新的jQuery对象:
1 2 3 4 | var container = $("#containerId"); // Then use it as: $(container).hide(); |
案例3:
选择一个dom元素,然后在构造函数中使用它来获取一个新的jQuery对象(然后在其上调用hide())
1 2 3 4 | var container = document.getElementById("#containerId"); // Then use it as: $(container).hide(); |
例如
1 2 3 4 5 6 7 8 9 | function hideContainer(container) { if(!(container instanceof jQuery)) { container = $("#containerId"); } container.hide(); } |
实际上通过选择器字符串(而不是使用对象引用)再次选择对象实际上更快,因为它不必访问对象属性来确定选择器。
看看这些jsPerf测试用例,你会发现
但同样,我认为
简短回答:案例2从现有的jQuery对象创建一个jQuery对象,这是不必要的。
$是jQuery Selector函数的别名。该函数可以采用一些不同的参数,例如......
在第三个例子中,对Selector功能的第二次调用有效,但它没有问题。