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


Answers:


165

更新:在过去几年中,情况发生了巨大变化。现在,您可以可靠地使用querySelectorquerySelectorAll,有关如何执行操作,请参见Wojtek的答案

现在不需要jQuery依赖项。如果您使用的是jQuery,那就太好了……如果您不使用jQuery,则不必再依赖于仅通过属性选择元素了。


在vanilla javascript中,执行此操作的方法不是很短,但是有一些可用的解决方案。

您可以执行以下操作,遍历元素并检查属性

如果可以选择像jQuery这样的库,则可以更轻松一些,例如:

$("[myAttribute=value]")

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

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

你也可以做start-withends-withcontains等... 还有的属性选择多个选项


6
实际上,香草JavaScript DOM API在现代浏览器上的效果很好
Wojtek Kruszewski

2
@WojtekKruszewski不在2010年:)我确实进行了更新,希望申请者将接受我们的申请-我们希望那里有最新信息。
尼克·克拉弗

1
我认为jQuery(或等效语言)可能是最简单的,尤其是要与跨浏览器兼容,而不必知道需要什么。
亚历克西斯·威尔克2014年

1
我不断收到一个空数组!我正在尝试通过d属性获取SVG,并尝试$(“ [d = path]”); 其中“路径”是一个变量,其中包含我需要的特定d属性。有没有人尝试使用svg路径执行此操作?
tx291 '16

436

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

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

https://developer.mozilla.org/zh-CN/docs/Web/API/Document.querySelectorAll

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

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

$('[data-foo="value"]');

2
为了具体化“现代”定义:caniuse.com/#search=querySelectorAll
serhio 2015年

似乎值不能为数字或SyntaxError: An invalid or illegal string was specified
jeum 2015年

3
选择器应该是:'[data-foo="value"]'
Yotam Omer

1
关于性能的任何注释?这样遍历所有节点是否更快?
Stepan Yakovenko

1
什么是“ data-foo” ...在此示例中,“ myAttribute”在哪里?
oo_dev

38

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

为您的:

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

并使用querySlectorAll()

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

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

有关https://developer.mozilla.org/zh-CN/docs/Web/CSS/Attribute_selectors的 “ CSS”属性选择器的更多信息


我必须删除像此document.querySelectorAll(“ selector [myAttribute = aValue]”);这样的内部引号。
Matjaz Hirsman

20
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根据评论建议进行了更新。


6
为什么呢?您正在执行此操作来循环所有DOM
Arthur

3
这看起来很棒-如果页面上只有5个元素。
sheriffderek

2
document.querySelectorAll('[data-foo="value"]');如@Wojtek Kruszewski在接受的遮篷上所建议的。
亚瑟

7

这是一个示例,如何通过src属性搜索文档中的图像:

document.querySelectorAll("img[src='https://pbs.twimg.com/profile_images/........jpg']");


0

使用查询选择器,例如:

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.