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.find
或jQuery.each
)构build在此自动caching行为上。
这只是你的浏览器是聪明的。 他们都是对象,但DOMElement是特殊的对象。 jQuery只是将DOMElements包装在一个Javascript对象中。
如果你想获得更多的debugging信息,我build议你看看Firebug for Firefox和Chrome的内置检查器(非常类似于Firebug)等debugging工具。