JQuery выбрать элемент, если * любой * атрибут соответствует - PullRequest
11 голосов
/ 04 декабря 2011

Мне нужен селектор типа $(".author"), который выберет элемент, если «автор» - это значение любого атрибута, а не только класса.

например. selector.text() должен давать «Эмили Экинс» для каждой из следующих страниц:

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

или

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

или

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

или

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

Есть ли способ сделать это?

Ответы [ 3 ]

14 голосов
/ 04 декабря 2011
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';
        }
    }
}

* Пример 1 003 *

Уф! Это заняло некоторое время. Но при этом будет проверяться каждый отдельный атрибут из любого заданного элемента , а если любой атрибут равен author, он изменит цвет фона на красный.

5 голосов
/ 04 декабря 2011

Надеюсь, это поможет

$("[id='author'],[class='author'],[name='author'],[data-random='author']").text()
2 голосов
/ 04 декабря 2011

Я бы воспользовался ответом @Web Developer, но добавлю, что если вам нужно будет выбирать их несколько раз, то более эффективно сохранить выбор как var:

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

$target.text();

Вот некоторая документация по селекторам атрибутов:

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

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

https://github.com/jquery/sizzle/wiki/Sizzle-Home (jQuery использует Sizzle)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...