0

如何根据属性值选择对象。

html:

<li abc='dog'>a</li>
<a def='cat'>b</a>
<span ghi='cat'>c</span>
<b jkl='dog'>d</b>
<u mno='dog'>e</u>
<div pqr='cow'>f</div>

js:

var listofdog = $("[?='dog']"); //find anything with attribute value = dog
4

3 回答 3

0

您必须获取所有属性的数组,并对其进行迭代。

var elem = document.getElementsByTagName('*');
for(var j = 0; j < elem.length; j++) {

   var attr = elem[j].attributes;

   for(var i = 0; i < attr.length; i++) {
       if(attr[i].value == 'dog') 
           // do something with elem[j]
   }

}
于 2013-05-31T18:27:33.727 回答
0

您可以执行以下操作:

function findElementsByAttributeValue(attrValue) {
    return $('*').filter(function (_) {
        var hasAttr = false;
        $(this.attributes).each(function (_, _) {
            return !(hasAttr = this.nodeValue === attrValue);
        });
        return hasAttr;
    });
}

尝试:

console.log(findElementsByAttributeValue('dog').length); // outputs 3

jsFiddle 在这里

于 2013-05-31T18:59:52.860 回答
0

此代码基于@Barmar 评论。还没有测试。如果工作就投票。

var value_to_find = "dog";
$("*").filter(function(){
    function has_attr_value(obj, value){
        var listofattr = $(obj).attributes;
        if (listofattr.length > 0){
             var has_attr = false;
             $.each(listofattr,function(){
                  if (this.value == value){
                      has_attr = true;
                      return;
                  }
             });
             return has_attr;
        }
        else{
            return false;
        }
    }

    return has_attr_value(this,value_to_find);
});
于 2013-06-19T01:44:59.253 回答