JQuery select element if *any* attribute matches

2019-02-16 12:33发布

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?

3条回答
兄弟一词,经得起流年.
2楼-- · 2019-02-16 12:55
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.

查看更多
该账号已被封号
3楼-- · 2019-02-16 12:57

Hope this helps

$("[id='author'],[class='author'],[name='author'],[data-random='author']").text()
查看更多
女痞
4楼-- · 2019-02-16 13:11

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)

查看更多
登录 后发表回答