querySelectorAll 用于分组数据属性

方法论

假设我有以下标记...

<div data-namespace-title="foo"></div>
<div data-namespace-description="bar"></div>
<div data-namespace-button="foo"></div>

无论如何,我可以用 选择它们querySelectorAll吗?

我试过了document.querySelectorAll([data-namespace-*]),但这当然行不通

特里

没有简单的方法可以做到这一点,仅仅是因为浏览器没有在属性名称/键(仅在其值上)实现通配符选择器。您可以做的是简单地遍历您的元素集(在这种情况下,它们的公分母是div),然后将它们过滤掉。

您可以通过调用访问每个 DOM 节点的属性列表<Node>.attributes,然后将其转换为数组,并检查每个属性中的一个或多个是否name与正则表达式模式匹配/^data-namespace-.*/gi

var els = document.querySelectorAll("div");
var filteredEls = Array.prototype.slice.call(els).filter(function(el) {
  var attributes = Array.prototype.slice.call(el.attributes);
  
  // Determine if attributes matches 'data-namespace-*'
  // We can break the loop once we encounter the first attribute that matches
  for (var i = 0; i < attributes.length; i++) {
    var attribute = attributes[i];
    
    // Return the element if it contains a match, and break the loop
    if (attribute.name.match(/^data-namespace-.*/gi))
        return el;
  }
});

console.log(filteredEls);
<div data-namespace-title="foo">title</div>
<div data-namespace-description="bar">description</div>
<div data-namespace-button="foobar">button</div>
<div data-dummy>dummy</div>


更新:如果您熟悉 ES6,它会变得更清晰,因为:

  • 我们可以用Array.from代替繁琐的Array.prototype.slice.call(...). 专业提示:您还可以使用扩展运算符,即const els = [...document.querySelectorAll("div")].
  • 我们可以使用Array.some代替手动创建for带有返回逻辑循环

const els = Array.from(document.querySelectorAll("div"));
const filteredEls = els.filter(el => {
  const attributes = Array.from(el.attributes);
  
  return attributes.some(attribute => attribute.name.match(/^data-namespace-.*/gi));
});

console.log(filteredEls);
<div data-namespace-title="foo">title</div>
<div data-namespace-description="bar">description</div>
<div data-namespace-button="foobar">button</div>
<div data-dummy>dummy</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

querySelectorAll返回什么类型的数据?

来自分类Dev

querySelectorAll() 排除属性和该属性的子项

来自分类Dev

您可以将数组用于 querySelectorAll 吗?

来自分类Dev

QuerySelectorAll不适用于onclick事件

来自分类Dev

Javascript querySelectorAll数据属性值不等于

来自分类Javascript

使用querySelectorAll更改多个元素的样式属性

来自分类Dev

错误:无法读取 null 的属性“querySelectorAll”

来自分类Dev

无法读取未定义的属性“ querySelectorAll”

来自分类Dev

如何从 querySelectorAll() 的每个结果中获取属性

来自分类Dev

修改querySelector以应用于所有页面元素(querySelectorAll)

来自分类Dev

为什么 queryselectorAll 不能用于删除元素?

来自分类Dev

未捕获的typeError:无法读取null的属性'querySelectorAll'

来自分类Dev

使用 querySelectorAll 查找逗号分隔属性的匹配项

来自分类Javascript

如何仅对具有特定属性集的元素使用querySelectorAll?

来自分类Dev

无法获取未定义或空引用的属性“ queryselectorall”

来自分类Dev

使用 querySelectorAll 从标签的所有属性中提取值

来自分类Dev

使用querySelectorAll选择后提取单个数据

来自分类Dev

querySelectorAll 以两个或多个数据集作为查询

来自分类Dev

document.querySelectorAll(不止一个数据集);

来自分类Dev

for循环querySelectorAll

来自分类Dev

遍历 querySelectorAll

来自分类Dev

getElementsByClassName与querySelectorAll

来自分类Dev

等待querySelectorAll

来自分类Dev

querySelectorAll && getBoundingClientRect

来自分类Dev

forEach适用于querySelectorAll,但不适用于getElementsByTagName?

来自分类Dev

Array.prototype.splice.call-不适用于querySelectorAll('。className')

来自分类Dev

为什么 EventListener 删除功能不适用于“querySelectorAll”

来自分类Dev

document.querySelectorAll()函数不适用于所有元素

来自分类Dev

单击事件仅适用于容器+使querySelectorAll在IE11中工作

Related 相关文章

  1. 1

    querySelectorAll返回什么类型的数据?

  2. 2

    querySelectorAll() 排除属性和该属性的子项

  3. 3

    您可以将数组用于 querySelectorAll 吗?

  4. 4

    QuerySelectorAll不适用于onclick事件

  5. 5

    Javascript querySelectorAll数据属性值不等于

  6. 6

    使用querySelectorAll更改多个元素的样式属性

  7. 7

    错误:无法读取 null 的属性“querySelectorAll”

  8. 8

    无法读取未定义的属性“ querySelectorAll”

  9. 9

    如何从 querySelectorAll() 的每个结果中获取属性

  10. 10

    修改querySelector以应用于所有页面元素(querySelectorAll)

  11. 11

    为什么 queryselectorAll 不能用于删除元素?

  12. 12

    未捕获的typeError:无法读取null的属性'querySelectorAll'

  13. 13

    使用 querySelectorAll 查找逗号分隔属性的匹配项

  14. 14

    如何仅对具有特定属性集的元素使用querySelectorAll?

  15. 15

    无法获取未定义或空引用的属性“ queryselectorall”

  16. 16

    使用 querySelectorAll 从标签的所有属性中提取值

  17. 17

    使用querySelectorAll选择后提取单个数据

  18. 18

    querySelectorAll 以两个或多个数据集作为查询

  19. 19

    document.querySelectorAll(不止一个数据集);

  20. 20

    for循环querySelectorAll

  21. 21

    遍历 querySelectorAll

  22. 22

    getElementsByClassName与querySelectorAll

  23. 23

    等待querySelectorAll

  24. 24

    querySelectorAll && getBoundingClientRect

  25. 25

    forEach适用于querySelectorAll,但不适用于getElementsByTagName?

  26. 26

    Array.prototype.splice.call-不适用于querySelectorAll('。className')

  27. 27

    为什么 EventListener 删除功能不适用于“querySelectorAll”

  28. 28

    document.querySelectorAll()函数不适用于所有元素

  29. 29

    单击事件仅适用于容器+使querySelectorAll在IE11中工作

热门标签

归档