这是一个关于jQuery API的设计的问题,不是使用细节。为什么jQuery库公开DOM元素?
为什么jQuery对象是DOM元素的集合而不是jQuery对象的集合?
仅处理jQuery对象将允许在整个代码中以相同方式完成所有DOM操作。似乎大多数使用模式立即将DOM元素转换为jQuery对象。据我了解,预计会有很多DOM元素到jQuery对象的转换,这就是为什么他们选择了简写$
函数。
为什么这样呢?为什么不假设我们想通过jQuery来操纵DOM,并避免到处显式转换?
这是一个关于jQuery API的设计的问题,不是使用细节。为什么jQuery库公开DOM元素?
为什么jQuery对象是DOM元素的集合而不是jQuery对象的集合?
仅处理jQuery对象将允许在整个代码中以相同方式完成所有DOM操作。似乎大多数使用模式立即将DOM元素转换为jQuery对象。据我了解,预计会有很多DOM元素到jQuery对象的转换,这就是为什么他们选择了简写$
函数。
为什么这样呢?为什么不假设我们想通过jQuery来操纵DOM,并避免到处显式转换?
当不需要的时候创建一个jquery对象将是低效的。例如:
$("a").each(function(){
console.log(this.href);
});
因为href是始终可用作为一个DOMElement的属性,这将是把它转换成一个jQuery对象,并使用.attr
的浪费。
对于jQuery来使每个jQuery对象,它必须为它迭代的每个元素创建一个新的jQuery对象,如果你不需要它是一个jQuery对象,这是一种浪费。相同的思维过程可以应用于事件处理程序,过滤器方法和任何其他迭代元素的方法。
jQuery对象允许您在任何Dom元素上使用各种有用的jQuery函数,这可以通过Dom遍历函数实现。 无论您正在操作的相关jQuery对象如何,您仍然可以获取原始的Dom元素。
不知道你在哪里得到你的信息。 jQuery返回一个包含DOM节点集合的jQuery对象。返回的对象是'jQuery'的一个实例。 – zzzzBov 2013-05-02 17:44:18
@zzzzBov推测他正在讨论诸如传递DOM元素的'$ .fn.each'之类的东西。 – numbers1311407 2013-05-02 17:45:35
'$(this)[0]'在被要求时仍然保留原始的JavaScript结构。这是将原始JavaScript与jQuery功能混合的非常强大的组合。 – 2013-05-02 17:47:54