根据属性值在DOM中查找元素

IT技术 javascript dom
2021-01-31 15:25:58

你能告诉我是否有任何 DOM API 可以搜索具有给定属性名称和属性值的元素:

就像是:

doc.findElementByAttribute("myAttribute", "aValue");
6个回答

现代浏览器支持本机,querySelectorAll因此您可以执行以下操作:

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

https://developer.mozilla.org/en-US/docs/Web/API/Document.querySelectorAll

有关浏览器兼容性的详细信息:

您可以使用 jQuery 来支持过时的浏览器(IE9 及更早版本):

$('[data-foo="value"]');
为了具体化“现代”定义:caniuse.com/#search=querySelectorAll
2021-03-20 15:25:58
请注意,“jQuery”示例可能不是 jQuery。它可能是 Chrome 或 Firefox 的 $. 在此处阅读更多相关信息:stackoverflow.com/questions/22244823/...
2021-03-22 15:25:58
什么是“data-foo”……这个例子中的“myAttribute”去哪儿了?
2021-03-22 15:25:58
选择器应该是: '[data-foo="value"]'
2021-03-27 15:25:58
关于性能有什么注意事项吗?这比遍历所有节点更快吗?
2021-04-07 15:25:58

更新:在过去的几年里,景观发生了巨大的变化。您现在可以可靠地使用querySelectorquerySelectorAll,请参阅Wojtek 的答案以了解如何执行此操作。

现在不需要 jQuery 依赖项。如果您正在使用 jQuery,那太好​​了……如果不是,您就不必再依赖它来仅按属性选择元素了。


在 vanilla javascript 中没有很短的方法可以做到这一点,但有一些可用的解决方案。

你做这样的事情,循环遍历元素并检查属性

如果像jQuery这样的库是一个选项,您可以更轻松地完成它,如下所示:

$("[myAttribute=value]")

如果该值不是有效的CSS 标识符(其中包含空格或标点符号等),则需要在该值周围加上引号(它们可以是单引号或双引号):

$("[myAttribute='my value']")

您还可以执行start-withends-withcontains等...属性选择器有多个选项

我认为 jQuery(或等效的)可能是最简单的,尤其是跨浏览器兼容,而不必知道需要什么。
2021-03-15 15:25:58
实际上,vanilla JavaScript DOM API 在现代浏览器上运行良好
2021-03-24 15:25:58
@WojtekKruszewski 不是在 2010 年 :) 不过我确实更新了,希望提问者会为我们移动接受 - 我们想要当前的信息。
2021-03-27 15:25:58
我不断得到一个空数组!我正在尝试通过它的 d 属性来获取 SVG,并且正在尝试 $("[d=path]"); 其中“路径”是一个包含我需要的特定 d 属性的变量。有没有人试过用 svg 路径来做这个?
2021-04-02 15:25:58

我们可以通过使用document.querySelector()document.querySelectorAll()方法在 DOM 中使用属性选择器

给你的:

document.querySelector("[myAttribute='aValue']");

并通过使用querySelectorAll()

document.querySelectorAll("[myAttribute='aValue']");

querySelector()querySelectorAll()方法中,我们可以像在“CSS”中选择一样选择对象。

更多关于https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors 中的“CSS”属性选择器

我不得不删除像这样的内部引号 document.querySelectorAll("selector[myAttribute=aValue]");
2021-03-19 15:25:58
FindByAttributeValue("Attribute-Name", "Attribute-Value");   

ps 如果您知道确切的元素类型,则添加第三个参数(即div, a, p ...etc...):

FindByAttributeValue("Attribute-Name", "Attribute-Value", "div");   

但首先,定义这个函数:

function FindByAttributeValue(attribute, value, element_type)    {
  element_type = element_type || "*";
  var All = document.getElementsByTagName(element_type);
  for (var i = 0; i < All.length; i++)       {
    if (All[i].getAttribute(attribute) == value) { return All[i]; }
  }
}

ps 根据评论建议更新。

这看起来很棒 - 如果页面上只有 5 个元素。
2021-03-12 15:25:58
为什么 ?!你通过这样做来循环你所有的 DOM
2021-03-17 15:25:58
document.querySelectorAll('[data-foo="value"]'); 正如@Wojtek Kruszewski 在接受的 awnser 上提出的那样。
2021-04-05 15:25:58

使用查询选择器,示例:

document.querySelectorAll(' input[name], [id|=view], [class~=button] ')

input[name]输入具有name属性的元素

[id|=view]id 以 开头的元素view-

[class~=button]元素与button类。