Выберите элементы по атрибуту

У меня есть набор флажков, с помощью сгенерированных идентификаторов и некоторые из них имеют дополнительный атрибут. Можно ли использовать JQuery для проверки того, имеет ли элемент определенный атрибут? Например, могу ли я проверить, имеет ли следующий элемент атрибут "myattr"? Значение атрибута может меняться.

<input type="checkbox" id="A" myattr="val_attr">A</input>

например, как я могу получить коллекцию всех флажков, которые имеют этот атрибут, не проверяя один за другим? Возможно ли это?

13 ответов


вы имеете в виду, можете ли вы их отбираете? Если да, то да:

$(":checkbox[myattr]")

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

EDIT:

вышеуказанное упадет в else-филиала, когда myattr существует, но является пустой строкой или "0". Если это проблема, вы должны явно протестировать на undefined:

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

Я знаю, что прошло много времени с тех пор, как был задан вопрос, но я нашел чек более ясным:

if ($("#A").is('[myattr]')) {
    // attribute exists
} else {
    // attribute does not exist
}

(Как найдено на этом сайте здесь)

документация о и можно найти здесь


В JavaScript...

null == undefined

...возвращает true*. Это разница между == и ===. Кроме того, имя undefined можно определить (это не ключевое слово, как null есть), так что вам лучше проверить каким-то другим способом. Наиболее надежным способом, вероятно, является сравнение возвращаемого значения typeof оператора.

typeof o == "undefined"

тем не менее, сравнение с null должно работать в этом случае.

* если undefined фактически не определено.


Это будет работать:

$('#A')[0].hasAttribute('myattr');

$("input[attr]").length может быть лучшим вариантом.


пара идей была разбросана с использованием "typeof", jQuery".это "и".фильтр " поэтому я подумал, что опубликую быстрое сравнение perf из них. Typeof кажется лучшим выбором для этого. В то время как другие будут работать, при вызове библиотеки jq для этих усилий, по-видимому, существует явная разница в производительности.


$("input#A").attr("myattr") == null

просто:

$('input[name*="value"]')

подробнее: официальные документы


if (!$("#element").attr('my_attr')){
  //return false
  //attribute doesn't exists
}

В дополнение к выбору всех элементов с атрибутом $('[someAttribute]') или $('input[someAttribute]') вы также можете использовать функцию для выполнения логических проверок объекта, например, в обработчике щелчка:

if(! this.hasAttribute('myattr') ) { ...


Я создал пакет npm с предполагаемым поведением, как описано выше в вопросе.

ссылке [npm] и [github]

использование очень простое. Например:

<p id="test" class="test">something</p>
$("#test").hasAttr("class")

возвращает true.

работает с camelcase тоже.


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

if ($("input#A").attr("myattr").length == 0)
 return null;
else
 return $("input#A").attr("myattr");