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

喜欢的东西:

doc.findElementByAttribute("myAttribute", "aValue");

当前回答

下面是如何使用querySelector进行选择:

document.querySelector("tagName[attributeName='attributeValue']")

其他回答

function optCount(tagId, tagName, attr, attrval) { inputs = document.getElementById(tagId).getElementsByTagName(tagName); if (inputs) { var reqInputs = []; inputsCount = inputs.length; for (i = 0; i < inputsCount; i++) { atts = inputs[i].attributes; var attsCount = atts.length; for (j = 0; j < attsCount; j++) { if (atts[j].nodeName == attr && atts[j].nodeValue == attrval) { reqInputs.push(atts[j].nodeName); } } } } else { alert("no such specified tags present"); } return reqInputs.length; }//optcount function closed

这是一个函数,用于选择具有特定属性值的特定标签。要传递的参数是标签ID,然后是标签名(标签ID内的标签名),属性,第四个是属性值。 此函数将返回指定属性中找到的元素数量及其值。 你可以根据自己的需要修改。

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

附注:如果你知道确切的元素类型,你可以添加第三个参数(i.e.div, a, p…等等…):

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]; }
  }
}

附注:根据评论建议更新。

更新:在过去的几年里,情况发生了巨大的变化。你现在可以可靠地使用querySelector和querySelectorAll,参见Wojtek的答案如何做到这一点。

现在不需要jQuery依赖项了。如果你正在使用jQuery,很好……如果不是这样,就不需要再依赖它来按属性选择元素了。


在普通javascript中并没有一个非常简单的方法来做到这一点,但是有一些可用的解决方案。

您可以这样做,遍历元素并检查属性

如果你可以选择jQuery这样的库,你可以简单一点,像这样:

$("[myAttribute=value]")

如果值不是一个有效的CSS标识符(它有空格或标点符号等),你需要在值周围加引号(它们可以是单引号或双引号):

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

你还可以使用start-with, end -with, contains等等。属性选择器有几个选项。

使用查询选择器,示例如下:

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

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

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

[class~=button]包含按钮类的元素。

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

你的:

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

使用querySelectorAll():

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

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

关于“CSS”属性选择器的更多信息,请参见https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors