jQuery DOM 遍历的澄清

发布于 2024-10-31 04:32:27 字数 159 浏览 3 评论 0原文

我不确定我是否完全理解 jQuery 文档中所说的 DOM 遍历。这真的意味着遍历包装对象中的 DOM 副本吗?在我看来,实际的遍历是在选择元素时完成的,而使用 .get() 和 .next() 这样的方法实际上是在遍历 DOM 的副本。我在这一点上是对的,还是我错过了什么?

提前致谢!

I'm not sure I'm completely understanding the jQuery docs here when they say DOM traversal. Does it really mean traversing a copy of the DOM in the wrapper object? It seems to me the actual traversal is done when selecting elements, whereas using methods like .get() and .next() are really traversing a copy of the DOM. Am I right on this, or did I miss something?

Thanks in Advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

維他命╮ 2024-11-07 04:32:27

jQuery 函数返回一个对象。它具有数字属性,其值是对 DOM 元素的引用,而不是副本。因此,给出以下内容:

<p id="p0">p0</p>
<p id="p1">p1</p>

<script>
var paragraphs = $('p');
</script>

paragraphs 将是一个具有“0”属性的对象,该属性的值是对 id p0 的 p 元素的引用,以及一个“1”属性,它是对 id p1 的 p 元素的引用。您可以使用以下方式引用第一个 p:

paragraphs['0'];

jQuery 有助于“遍历 DOM”,因为您可以使用选择器(或多个选择器)来“收集”元素作为对象的属性,然后迭代该对象的数字属性并执行以下操作:和他们一起做点什么。因此,要将类添加到上面的 p 元素,您可以执行以下操作:

paragraphs.each(function(i,el){$(el).addClass('newClass')})

普通 javascript 中的等效项是:

var paragraphs = document.getElementsByTagName('p');
var i = paragraphs.length;
while (i--) {
    myLib.addClass(paragraphs[i], 'newClass');
}

其中 myLib.addClass 是一个简单的函数,用于将类添加到 className 属性。如果 addClass 函数更聪明一点,它可以接受元素引用的数组(或类似数组的对象),那么 POJS 版本将是:

myLib.addClass(document.getElementsByTagName('p'), 'newClass');

因此,构建等效的“临时”“DOM 遍历”功能是不是特别难。

The jQuery function returns an object. It has numeric properties whose values are references to DOM elements, not copies. So given the following:

<p id="p0">p0</p>
<p id="p1">p1</p>

<script>
var paragraphs = $('p');
</script>

paragraphs will be an object that has a '0' property whose value is a reference to the p element with id p0, and a '1' property that is a reference to the p element with id p1. You could reference the first p using:

paragraphs['0'];

jQuery helps with "traversing the DOM" in that you can use a selector (or multiple selectors) to "collect" elements as properties of an object, then iterate over the numeric properties of that object and do something with them. So to add a class to the p elements above, you can do:

paragraphs.each(function(i,el){$(el).addClass('newClass')})

The equivalent in plain javascript would be:

var paragraphs = document.getElementsByTagName('p');
var i = paragraphs.length;
while (i--) {
    myLib.addClass(paragraphs[i], 'newClass');
}

Where myLib.addClass is a simple function to add a class to the className property. If the addClass function is a little smarter so it could accept an array (or array-like object) of element references, then the POJS version would be:

myLib.addClass(document.getElementsByTagName('p'), 'newClass');

So building equivalent ad hoc "DOM traversal" capability is not particularly difficult.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文