2013-05-02 100 views
-1

这是一个关于jQuery API的设计的问题,不是使用细节。为什么jQuery库公开DOM元素?

为什么jQuery对象是DOM元素的集合而不是jQuery对象的集合?

仅处理jQuery对象将允许在整个代码中以相同方式完成所有DOM操作。似乎大多数使用模式立即将DOM元素转换为jQuery对象。据我了解,预计会有很多DOM元素到jQuery对象的转换,这就是为什么他们选择了简写$函数。

为什么这样呢?为什么不假设我们想通过jQuery来操纵DOM,并避免到处显式转换?

+6

不知道你在哪里得到你的信息。 jQuery返回一个包含DOM节点集合的jQuery对象。返回的对象是'jQuery'的一个实例。 – zzzzBov 2013-05-02 17:44:18

+0

@zzzzBov推测他正在讨论诸如传递DOM元素的'$ .fn.each'之类的东西。 – numbers1311407 2013-05-02 17:45:35

+0

'$(this)[0]'在被要求时仍然保留原始的JavaScript结构。这是将原始JavaScript与jQuery功能混合的非常强大的组合。 – 2013-05-02 17:47:54

回答

3

当不需要的时候创建一个jquery对象将是低效的。例如:

$("a").each(function(){ 
    console.log(this.href); 
}); 

因为href是始终可用作为一个DOMElement的属性,这将是把它转换成一个jQuery对象,并使用.attr的浪费。

对于jQuery来使每个jQuery对象,它必须为它迭代的每个元素创建一个新的jQuery对象,如果你不需要它是一个jQuery对象,这是一种浪费。相同的思维过程可以应用于事件处理程序,过滤器方法和任何其他迭代元素的方法。

+0

除了不必要的开销之外是否还有其他原因?转换确实很昂贵,特别是对于现代浏览器? – treydavis 2013-05-02 18:01:05

+0

有一些额外的开销,http://jsperf.com/jquery-eq-vs-get从jQuery对象开始获取dom元素要比包含dom元素的jQuery对象快得多。 – 2013-05-02 18:15:06

+0

我明白了。快几倍。所以jQuery被设计为DOM选择和一次处理几个元素。为了处理单个元素,请直接使用DOMElement。 – treydavis 2013-05-02 18:38:51

-1

jQuery对象允许您在任何Dom元素上使用各种有用的jQuery函数,这可以通过Dom遍历函数实现。 无论您正在操作的相关jQuery对象如何,您仍然可以获取原始的Dom元素。