JQuery select element if *any* attribute matches

2019-02-16 13:14发布

问题:

I want a selector like $(".author") that will select an element if "author" is the value of any attribute, not just class.

E.g. selector.text() should give "Emily Ekins" for each of the following pages:

<a href="http://reason.com/people/emily-ekins" rel="author">Emily Ekins</a>

or

<bloop href="http://reason.com/people/emily-ekins" id="author">Emily Ekins</a>

or

<blah href="http://reason.com/people/emily-ekins" class="author">Emily Ekins</a>

or

<tag href="http://reason.com/people/emily-ekins" random="author">Emily Ekins</a>

Is there any way to do this?

回答1:

var elements = document.getElementsByTagName("*");
for(var i=0;i<elements.length;i++){
    var element = elements[i];
    var attr = element.attributes;
    for(var j=0;j<attr.length;j++){
        if(attr[j].nodeValue == 'author'){
            element.style.backgroundColor='red';
        }
    }
}

Example

Whew! That took some time. But this will check every single attribute of any given element, and if any attribute is author, it will change the background color to red.



回答2:

Hope this helps

$("[id='author'],[class='author'],[name='author'],[data-random='author']").text()


回答3:

I would use @Web Developer's answer, but will add that if you're going to need to select them multiple times, then it's more efficient to save the selection as a var:

var $target = $("[id='author'],[class='author'],[name='author']");

$target.text();

Here's some documentation on attribute selectors:

http://api.jquery.com/category/selectors/

http://www.w3.org/TR/css3-selectors/#attribute-selectors

https://github.com/jquery/sizzle/wiki/Sizzle-Home (jQuery uses Sizzle)