Существует ли селектор jQuery для проверки наличия у тега каких-либо атрибутов? - PullRequest
7 голосов
/ 15 марта 2010

При попытке выбрать элементы с какими-либо атрибутами следующее выдает синтаксическую ошибку jQuery.

$("div[*]")

Есть ли селектор для проверки наличия у тега каких-либо атрибутов?

Протестировано с jQuery 1.3

Ответы [ 4 ]

6 голосов
/ 15 марта 2010

Я так не думаю, но это должно сработать

$('*').filter(function(){return this.attributes.length;})

и наоборот:

$('*').filter(function(){return !this.attributes.length;})
5 голосов
/ 15 марта 2010

Вы можете создать свой собственный селектор без атрибутов:

$.expr[':'].noAttrs = function( objNode  ){
    if (objNode.attributes.length) return( true );
    return( false );
}

$("div:noAttrs")
1 голос
/ 15 марта 2010

Я согласился с предложением Ариэля Поповского использовать фильтр, хотя, если бы мне это было нужно во многих местах, я бы использовал предложение petersendidit о создании селектора клиента.

(Важное) отличие состоит в том, что свойство .specified должно быть проверено. IE всегда возвращает более 80 атрибутов.

Примечание: даже это не 100%. Есть некоторые атрибуты, такие как INPUT .value, которые являются особыми случаями, но, поскольку я использую DIV, я могу их игнорировать.

$("div").filter(function()
{ 
    for (var i = 0; i < this.attributes.length; i++)
    {
        var attr = this.attributes[i];
        if (attr.specified) 
        {
            return true;
        }
    }
    return false;
})
0 голосов
/ 15 марта 2010

Может быть if($('.class').attr('*:attr').length > 0)

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