来自函数参数的$(“someElement”)和jquery对象之间的区别

时间:2013-11-05 19:22:48

标签: jquery

我有以下代码行

$("*[class]").each(function (index, elem)
{
    console.log("Element: " + elem.tagName + " " + $(elem).prop("className"));
});

我无法理解的是elem$(elem)之间的区别 elem已经不是jJuery对象吗?如果是,那么为什么我们需要在$(elem)参数中再次使用console.log来获取属性className。 为什么我们不能直接做elem.prop("className")

之类的事情

2 个答案:

答案 0 :(得分:3)

首先,存在DOM。这是浏览器在解析HTML文档后理解HTML文档的方式。浏览器本身可以理解访问元素和与元素交互的特定方式。

然而,这些是相当有限的,非常详细。它们不易编写或阅读。

这就是创建jQuery的原因。

使用$()构建jQuery对象时,它会创建一个“包装”本机DOM对象的新对象,实际上通常用于包装多个DOM对象并一起处理它们。有大量的功能可供使用,并为您完成所有冗长的工作,因此您的代码很容易编写和读取。使用jQuery没有什么新东西可以做,但写入和阅读起来要快得多。

在这种情况下,elem是本机DOM对象。当使用each迭代集合时,jQuery不会自动将DOM对象转换为jQuery对象。这有两个主要原因。首先,您并不总是需要jQuery对象。例如,如果你想要做的就是获得元素的tagName属性,你就可以elem.tagName。其次,创建jQuery对象的计算成本很高。它可能会大大减慢你的脚本速度。

因此,如果你想获得一个jQuery对象,你需要自己使用jQuery构造函数。

答案 1 :(得分:1)

each函数参数是本机DOM元素,而不是包装该本机DOM元素的jQuery对象。

请注意,对于我所知道的所有jQuery函数,valattrmap ......总是参数是DOM元素jQuery对象。

您还可以使用this关键字访问该原生元素。


Native元素是实现Element interface的元素 jQuery对象只是一个包装一组原生元素的对象(零到N个元素) jQuery对象具有更强大和简单的API,例如.html(),而本机元素具有笨拙的API,许多示例......

jQuery对象有prop,而本机元素只有属性...
$(element).prop('id') VS element.id
这个例子很糟糕,因为通常本机方法更简单。 :)