jQuery对象和DOM元素

我想了解jQuery对象和DOM元素之间的关系..

当jQuery返回一个元素时,它会在alert中显示为[object Object] 。 当getElementByID返回一个元素时,它显示为[object HTMLDivElement] 。 那究竟是什么意思? 我的意思是这两个对象有区别?

还有什么方法可以对jQuery对象与DOM元素进行操作? 单个jQuery对象可以表示多个DOM元素吗?

我想了解jQuery对象和DOM元素之间的关系

jQuery对象是一个包含DOM元素的类似数组的对象。 一个jQuery对象可以包含多个DOM元素,具体取决于您使用的select器。

还有什么方法可以对jQuery对象与DOM元素进行操作? 单个jQuery对象可以表示多个DOM元素吗?

jQuery函数(完整列表在网站上)使用jQuery对象而不是DOM元素。 您可以使用.get()或直接访问所需索引中的元素访问jQuery函数内的DOM元素:

 $("selector")[0] // Accesses the first DOM element in this jQuery object $("selector").get(0) // Equivalent to the code above $("selector").get() // Retrieve a true array of DOM elements matched by this selector 

换句话说,以下应该会得到相同的结果:

 <div id="foo"></div> alert($("#foo")[0]); alert($("#foo").get(0)); alert(document.getElementById("foo")); 

有关jQuery对象的更多信息, 请参阅文档 。 另外查看.get()的文档

当你使用jQuery获取一个DOM元素时,jQuery对象返回包含对元素的引用。 当你使用像getElementById这样的本地函数时,你直接得到了元素的引用,而不是包含在一个jQuery对象中。

一个jQuery对象是一个类似数组的对象,可以包含多个DOM元素:

 var jQueryCollection = $("div"); //Contains all div elements in DOM 

上面的代码可以在没有jQuery的情况下执行:

 var normalCollection = document.getElementsByTagName("div"); 

事实上,这正是jQuery在内部传递像div这样的简单select器时所要做的。 您可以使用get方法访问jQuery集合中的实际元素:

 var div1 = jQueryCollection.get(0); //Gets the first element in the collection 

当在jQuery对象中有一个元素或一组元素时,可以使用jQuery API中提供的任何方法,而具有raw元素时,只能使用本机JavaScript方法。

我上个月才刚刚开始玩jQuery,而且我脑子里也有类似的问题。 到目前为止,您收到的所有答案都是有效的,但是一个非常准确的答案可能是这样的:

假设你在一个函数中,并且指向调用元素,你可以使用this ,或者$(this) ; 但有什么区别? 原来,当你使用$(this) ,你正在把this包装在一个jQuery对象中。 好处是一旦一个对象是一个jQuery对象,就可以使用它上面的所有jQuery函数。

这是非常强大的,因为你甚至可以包装元素的string表示forms, var s = '<div>hello <a href='#'>world</a></div><span>!</span>'在一个jQuery对象里面,直接把它包装在$()中: $(s) 。 现在你可以用jQuery来操纵所有这些元素。

大多数jQuery成员Functions没有返回值,而是返回当前的jQuery Object或另一个jQuery Object


所以,

 console.log("(!!) jquery >> " + $("#id") ) ; 

将返回[object Object] ,即一个jQuery Object ,它维护对Document进行评估select器String"#id" )结果的集合,

同时,

 console.log("(!!) getElementById >> " + document.getElementById("id") ) ; 

将会返回[object HTMLDivElement] (或者实际上IE中的[object Object] ),因为/如果返回值是一个div Element


还有什么方法可以对jQuery对象与DOM元素进行操作? (1)单个jQuery对象是否可以表示多个DOM元素? (2)

(1)在jQuery中有一些与DOM Object相关的成员Function 。 一旦你有一个特定的任务(如selectNode或操纵它们),最好的做法是search相关Function的jQuery API文档。

  • jQuery文档

(2)是的,单个jQuery Object可以维护多个DOM Element的列表。 有多个Functions (如jQuery.findjQuery.each )构build在此自动caching行为上。

这只是你的浏览器是聪明的。 他们都是对象,但DOMElement是特殊的对象。 jQuery只是将DOMElements包装在一个Javascript对象中。

如果你想获得更多的debugging信息,我build议你看看Firebug for Firefox和Chrome的内置检查器(非常类似于Firebug)等debugging工具。