2010-02-10 4 views
6

я могу проверить, если элемент имеет определенный атрибут с:проверка JQuery, если элемент содержит какой-нибудь атрибут

if ($('#A').attr('myattr') !== undefined) { 
    // attribute exists 
} else { 
    // attribute does not exist 
} 

Как я могу проверить, если элемент имеет какой-нибудь атрибут?

Спасибо

+0

Интересно, предлагает ли jQuery нечто вроде '$ (" # a [*] ")'? –

+0

@Naeem: Я думаю, что это может быть такая приятная функция, но поскольку есть простые способы решить эту проблему, я не думаю, что они могли бы ее добавить. – Tarik

ответ

6

Вот функция tha т определяет, будет ли какой-либо из элементов, соответствующих селектора имеют по крайней мере один атрибут:

function hasOneOrMoreAttributes(selector) { 
    var hasAttribute = false; 
    $(selector).each(function(index, element) { 
     if (element.attributes.length > 0) { 
      hasAttribute = true; 
      return false; // breaks out of the each once we find an attribute 
     } 
    }); 
    return hasAttribute; 
} 

Использование:

if (hasOneOrMoreAttributes('.someClass')) { 
    // Do something 
} 

Если вы хотите работать на выбранных элементах, которые имеют по крайней мере один атрибут, это еще проще - создать пользовательский фильтр:

// Works on the latest versions of Firefox, IE, Safari, and Chrome 
// But not IE 6 (for reasons I don't understand) 
jQuery.expr[':'].hasAttributes = function(elem) { 
    return elem.attributes.length; 
}; 

, который можно использовать, как это:

$(document).ready(function(){ 
    $('li:hasAttributes').addClass('superImportant'); 
} 
+0

Разве это не слишком много:' $ ("some"). Get (0) .attributes> 0' будет достаточно Я думаю. – Tarik

+0

@Tarik - это проверяет только первый согласованный элемент, когда может быть несколько совпадений. –

+0

@Jeff - Есть ли способ добавить класс к элементам, которые имеют атрибуты с этой функцией? Thanx снова – Mircea

9

Если вы хотите увидеть, если элемент имеет определенный атрибут, просто сделать это:

if ($('#something').is('[attribute]')) { 
    // ... 
} 
+1

Мне интересно узнать, есть ли у элемента какой-либо атрибут вообще не определенный. – Mircea

+0

ОК, но дело в том, что то, что вы набрали в приведенном выше примере, не будет работать. – Pointy

+0

О, ладно, я понимаю вашу точку зрения ... Thanx – Mircea

2

не все Код jQuery, но он будет работать

$("a").click(
function() { 
    if($("a").get(0).attributes > 0) 
     alert("it has attributes"); 
}) 
+0

Thanx Tarik, я изучаю это – Mircea

0

Вот решение, которое я нашел, чтобы быть более надежным, чтобы знать, если элемент имеет определенные атрибуты, который работает в IE, Chrome и Firefox:

$(selector).each(function(index, element) { 
    if (element.hasAttributes) { // Some browser supports this method 
     if (element.hasAttributes()) { 
      return true; 
     } 
    } else { 
      // IE counts many attributes - even if not set explicitly 
      var attrs = element.attributes; 
      for (var i = 0; i < attrs.length; i++) { 
       if (attrs[i].specified) { 
        return true; 
       } 
      } 
    } 
    return false; 
}); 

Проблема заключается в том, что IE возвращает рассчитывать высокие атрибуты, даже если ни один задается явно. Например, для простого тега < p> IE говорил мне, что у него есть 111 атрибутов. С этим решением, я был в состоянии отфильтровать те атрибуты, которые я не был заинтересован в

Это решение было принято здесь:. (! Просто скопировал его в случае, если страница удалена) http://help.dottoro.com/ljevmnkf.php

1

Я не уверен, что если вы желаете, чтобы просто вернуть элементы, которые содержат атрибут, но если вы, я нашел самый простой способ быть:

$('selector[attribute]') 

Это возвращает объект JQuery, чтобы включить все элементы, содержат атрибут независимо от его значения. Например.

$(':text[maxlength]').addClass('has_max_length'); 

Это даст все текстовые входы с атрибутом maxlength для класса 'has_max_length'.

4
$("selector").get(0).hasAttributes("attributes"); 
+0

Отличный ответ! спасибо –

Смежные вопросы