jQuery对象和DOM元素

tes*_*dtv 76 javascript jquery dom

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

当jQuery返回一个元素时,它会[object Object]在警报中显示出来.当getElementByID返回它显示为一个元素[object HTMLDivElement].这究竟是什么意思?我的意思是他们俩都是有区别的对象吗?

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

And*_*ker 95

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

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

还有什么方法可以对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
Run Code Online (Sandbox Code Playgroud)

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

<div id="foo"></div>

alert($("#foo")[0]);
alert($("#foo").get(0));
alert(document.getElementById("foo"));
Run Code Online (Sandbox Code Playgroud)

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


Jam*_*ice 13

当您使用jQuery获取DOM元素时,jQuery对象返回包含对该元素的引用.当您使用类似的本机函数时getElementById,您将直接获得对元素的引用,而不是包含在jQuery对象中.

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

var jQueryCollection = $("div"); //Contains all div elements in DOM
Run Code Online (Sandbox Code Playgroud)

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

var normalCollection = document.getElementsByTagName("div");
Run Code Online (Sandbox Code Playgroud)

实际上,当你传入一个简单的选择器时,这正是jQuery在内部所做的div.您可以使用以下get方法访问jQuery集合中的实际元素:

var div1 = jQueryCollection.get(0); //Gets the first element in the collection
Run Code Online (Sandbox Code Playgroud)

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


rkw*_*rkw 10

我上个月刚刚开始玩jQuery,我心里也有类似的问题.到目前为止,您收到的所有答案都是有效的,但有一个非常精确的答案可能是:

假设你在一个函数中,并且要引用调用元素,你可以使用this,或者$(this); 但有什么区别?事实证明,当你使用时$(this),你将包装this在一个jQuery对象中.好处是,一旦一个对象是一个jQuery对象,你就可以使用它上面的所有jQuery函数.

它非常强大,因为您甚至可以var s = '<div>hello <a href='#'>world</a></div><span>!</span>'在jQuery对象中包装元素的字符串表示,只需将其包装在$()中:$(s).现在,您可以使用jQuery操作所有这些元素.


FK8*_*K82 5

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


所以,

console.log("(!!) jquery >> " + $("#id") ) ; 
Run Code Online (Sandbox Code Playgroud)

将返回[object Object],即jQuery Object维护集合,这是评估选择器String("#id")的结果Document,

而,

console.log("(!!) getElementById >> " + document.getElementById("id") ) ;
Run Code Online (Sandbox Code Playgroud)

将返回[object HTMLDivElement](或实际上[object Object]在IE中)因为/如果返回值是a div Element.


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

(1)FunctionjQuery中有一大堆与DOM有关的成员Object.做imo的最好的事情是,Function一旦你有一个特定的任务(比如选择Nodes或操纵它们),就可以在jQuery API文档中搜索相关信息.

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