为什么jQuery库公开DOM元素?

为什么jQuery库公开DOM元素?,jquery,api-design,Jquery,Api Design,这是一个关于jQuery API设计的问题,而不是使用细节。 为什么jQuery对象是DOM元素的集合而不是jQuery对象的集合 仅使用jQuery对象将允许在整个代码中以相同的方式执行所有DOM操作。似乎大多数使用模式都会立即将DOM元素转换为jQuery对象。据我所知,许多DOM元素到jQuery对象的转换是需要的,这就是为什么他们选择了一个速记$函数 为什么要这样做?为什么不假设我们希望通过jQuery操作DOM并避免在任何地方进行显式转换呢?jQuery对象允许您在任何DOM元素上使用

这是一个关于jQuery API设计的问题,而不是使用细节。

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

仅使用jQuery对象将允许在整个代码中以相同的方式执行所有DOM操作。似乎大多数使用模式都会立即将DOM元素转换为jQuery对象。据我所知,许多DOM元素到jQuery对象的转换是需要的,这就是为什么他们选择了一个速记
$
函数


为什么要这样做?为什么不假设我们希望通过jQuery操作DOM并避免在任何地方进行显式转换呢?

jQuery对象允许您在任何DOM元素上使用各种有用的jQuery函数,这要归功于DOM遍历函数。
您仍然有可能获得原始Dom元素,无论您正在操作的是什么相关的jQuery对象。

如果不需要jQuery对象,那么创建jQuery对象将效率低下。例如:

$("a").each(function(){
    console.log(this.href);
});
由于href始终作为domeElement的属性可用,因此将其转换为jQuery对象并使用
.attr
将是一种浪费


为了让jQuery将每个元素都变成jQuery对象,它必须为它迭代的每个元素创建一个新的jQuery对象,如果您不需要它成为jQuery对象,这是一种浪费。同样的思维过程也可以应用于事件处理程序、筛选器方法和任何其他迭代元素的方法。

不确定从何处获取信息。jQuery返回一个包含DOM节点集合的jQuery对象。返回的对象是
jQuery
@zzzzBov的一个实例,他可能在谈论
$.fn.每个
,都传递DOM元素。
$(此)[0]
在请求时仍然保持原始JavaScript结构。这是一个非常强大的组合,可以将原始JavaScript与jQuery的功能结合起来。@每个人都对第一条评论投赞成票。OP不是在谈论jQuery函数。@zzzzBov我担心人们会把我使用的“jQuery”与
jQuery
函数混淆起来。更改标题。除了不必要的开销之外,还有其他原因吗?转换真的那么昂贵吗,特别是对于现代浏览器?这涉及到一点开销,从jQuery对象开始时,获取dom元素要比获取包含dom元素的jQuery对象快得多。我明白了。快了好几倍。因此jQuery是为DOM选择而设计的,可以同时处理多个元素。要使用单个元素,请直接使用DomeElement。正确的,直接使用DomeElement通常要快得多,只有在使代码更方便、可读、可维护和/或跨浏览器时才使用jQuery。