jQuery对象和DOM元素之间有什么区别? .get()和.index()之间的区别?
在试图找出jQuery的.get()
和.index()
之间的区别时,我引出了这个问题,我查看了jQuery API,我仍然没有得到它们之间的区别,也许我我不理解这个术语?
jQuery对象和DOM元素之间有什么区别? DOM元素和DOM节点是一回事吗? 它们只是
等是一个DOM节点/ DOM元素只是一个HTML标签吗?
编辑:并不是DOM只是页面的结构? etc.
?
get
方法用于访问jQuery对象中的DOM元素:
var allDivs = $("div").get();
在该示例中, allDivs
将是一个包含所有匹配元素的数组(在这种情况下,它将包含DOM中的每个div
元素)。
index
方法返回一个整数,该整数告诉您所选元素相对于其兄弟节点的位置。 请考虑以下HTML:
- 1
- 2
- 3
以下是jQuery:
console.log($("#second").index()) //Prints "1"
至于你的另一个问题,DOM节点几乎是DOM中的任何东西。 元素是节点的类型(类型1)。 例如,您还有文本节点(类型3)。 元素几乎都是标记。
为了更清楚,请考虑以下HTML:
Some text Another div
以下JS:
var div = $("#example").get(0); for(var i = 0; i < div.childNodes.length; i++) { console.log(div.childNodes[i].nodeType); }
那将打印出来:
3 - Text node ("Some text") 1 - Element node (div) 3 - Text node ("Another div") 8 - Comment node () 3 - Text node ("A comment")
您可以在此处找到节点类型列表。 有关DOM实际内容的精彩介绍,请参阅此MDN文章
HTML!= DOM!= Javascript!= jQuery,但它们都是密切相关的。
浏览器从Web服务器接收HTML文档,该文档只是文本。 浏览器继续将此文本解析为一个内部结构,它实际上可以用来直观地呈现页面。 DOM表示浏览器具有HTML文档的内部结构。 可以使用Javascript(或其他方法)来操纵该DOM,从而改变页面的可视化渲染 。 DOM节点和DOM元素只是同一个事物的两个名称。 DOM元素表示页面上的可视或function元素,该元素是从原始HTML文档创建的。
jQuery现在是一个Javascript库,通过提供一些便利捷径,使得操作DOM比使用纯Javascript更容易。 jQuery对象是一个Javascript对象,它可能与DOM有关,也可能没有(通常是这样)。 jQuery对象是Javascript中DOM元素的便利包装器,它是一种操作DOM的方法,DOM是从HTML文件创建的页面的表示。
希望有所帮助。 :O)
当我开始使用jQuery时,我喜欢看它的一种方式是这样的(是的,我知道一切都不完全正确,但它们起到了松散的类比):
DOM元素是HTML文档中通常使用vanilla Javascript获取的节点。 var foo = document.getElementById('bar')
可以获得原始的DOM元素。
jQuery包装器对象(对于jQuery开发的很大一部分)基本上是一个包含DOM元素的全新对象。 而这基本上就是一个容器。 这就是你得到的东西,比如$('#bar')
,你也可以通过像$(foo)
这样的DOM元素来获取。 这些实现了DOM对象上的各种jQueryfunction – 如果它们是普通的DOM对象,它们通常不具备这些function。
在此基础上, .get()
和.index()
之间的区别非常简单。
.get(n)
返回jQuery包装器对象中的nth
DOM元素。 类似于$('input').get(0)
东西.get $('input').get(0)
为你提供了DOM中的第一个元素,就好像你在它上面调用了
document.getElementById()
(或类似的东西)。 .eq(n)
执行类似的操作,但返回包含DOM元素的jQuery包装器对象。
.index()
只是给出了jQuery包装器对象中特定元素的位置。 这很像你期望它们在数组和其他集合中工作的方式。
我知道这不是一个解释 – 其他人在这里做得很好。 但我认为视觉效果可以告诉你更多。
使用firebug获取Safari / Chrome(带有开发人员菜单)或Firefox,并了解这些Web编程工具如何直观地表示您想要了解的内容。
例如,DOM“文档对象模型”说明了这一切,但除非您将其视为层次结构,否则您将无法理解文档(html页面)中对象(元素)之间的关系。 这些toold允许您以合理的视觉方式导航该层次结构。
同样,它们还包含评估工具,允许您键入javascript对象的名称以查看它包含的内容。
一旦你玩了这个,你就会知道什么是文档对象和javascript对象。
然而,回答这个问题.get()
获取元素并允许您直接与它进行交互,而无需以编程方式导航DOM层次结构,而.index()
只是找到它在层次结构中的位置索引
在我看来,代码
$('div').get()
是一个Jquery对象,其参数是div-selector。 在这个对象上调用get()
。 您还可以将Parameter视为constructor
(如面向对象语言)参数,因为会创建一个新对象。
DOM元素是使用此代码获得的浏览器呈现的文本jquery对象var object = {} console.log(object);
DOM不是页面的结构,如下所示
etc.
DOM只是页面的表示
简而言之,DOM是一种面向对象的编程语言,它使您能够访问和操作实际文档。
document.getElementById("a") /* here document is an object and getElementById is an method of it */
更确切地说,DOM是一种接口而不是编程语言,它与语言无关。 它碰巧被包含在Javascript中。