tarayani
tarayani

Reputation: 193

JQuery select element if *any* attribute matches

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?

Upvotes: 11

Views: 3673

Answers (3)

Purag
Purag

Reputation: 17071

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.

Upvotes: 14

ryanve
ryanve

Reputation: 52611

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)

Upvotes: 2

aWebDeveloper
aWebDeveloper

Reputation: 38432

Hope this helps

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

Upvotes: 5

Related Questions