仅使用纯JavaScript,选择所有具有特定data-属性(比如data-foo)的DOM元素的最有效方法是什么?

元素可能不同,例如:

<p data-foo="0"></p><br/><h6 data-foo="1"></h6>

当前回答

document.querySelectorAll("[data-foo]")

会得到所有带有该属性的元素。

document.querySelectorAll("[data-foo='1']")

只会得到值为1的。

其他回答

原生JavaScript的querySelector和querySelectorAll方法可以用来定位元素。如果数据集值是变量,请使用模板字符串。

var str = “term”; var term = document.querySelectorAll('[data-type=${str}]'); console.log(term[0].textContent); var details = document.querySelector('[data-type=“details”]'); console.log(details.textContent); <dl> <dt 数据类型=“term”>事物</dt> <dd 数据类型=“详细信息”>最通用的类型。</dd> </dl>

document.querySelectorAll("[data-foo]")

会得到所有带有该属性的元素。

document.querySelectorAll("[data-foo='1']")

只会得到值为1的。

试一下→这里

    <!DOCTYPE html>
    <html>
        <head></head>
        <body>
            <p data-foo="0"></p>
            <h6 data-foo="1"></h6>
            <script>
                var a = document.querySelectorAll('[data-foo]');

                for (var i in a) if (a.hasOwnProperty(i)) {
                    alert(a[i].getAttribute('data-foo'));
                }
            </script>
        </body>
    </html>
document.querySelectorAll('[data-foo]')

获取具有data-foo属性的所有元素的列表

如果你想要获取具有特定值的data属性的元素

<div data-foo="1"></div>
<div data-foo="2"></div>

我想把div的data-foo设为2

document.querySelector('[data-foo="2"]')

但问题来了……如果我想匹配数据attirubte值与一些变量的值怎么办?例如,如果我想获取data-foo属性设置为I的元素

var i=2;

因此,您可以使用模板字面量动态地选择具有特定数据元素的元素

document.querySelector(`[data-foo="${i}"]`)

注意,即使你没有在字符串中写value它也会被转换成字符串,就像我写的那样

<div data-foo=1></div>

然后在Chrome开发工具中检查元素,元素将如下所示

<div data-foo="1"></div>

你也可以在控制台写下面的代码来交叉验证

console.log(typeof document.querySelector(`[data-foo="${i}"]`).dataset('dataFoo'))

为什么我写了“dataFoo”,虽然属性是data-foo的原因数据集属性被转换为骆驼case属性

我已参考以下连结:

MDN:数据- * MDN:使用数据属性

这里有一个有趣的解决方案:它使用浏览器的CSS引擎为匹配选择器的元素添加一个虚拟属性,然后计算计算的样式来找到匹配的元素:

它动态地创建了一个样式规则[…]然后扫描整个文档(使用 备受谴责和特定于ie但非常快速的document.all),并获得 每个元素的计算样式。然后我们寻找foo 属性,并检查它的计算结果是否为 “酒吧”。对于每个匹配的元素,我们将其添加到数组中。