У меня есть коллекция флажков с сгенерированными идентификаторами, и некоторые из них имеют дополнительный атрибут. Можно ли использовать JQuery, чтобы проверить, имеет ли элемент определенный атрибут? Например, могу ли я проверить, имеет ли следующий элемент атрибут «myattr»? Значение атрибута может варьироваться.
<input type="checkbox" id="A" myattr="val_attr">A</input>
Например, как я могу получить коллекцию всех флажков, которые имеют этот атрибут, не проверяя один за другим? Это возможно?
jquery
attributes
Киприан Гросу
источник
источник
$filtered = $collection.filter('[attribute_name]');
Ответы:
Вы имеете в виду, вы можете выбрать их? Если так, то да:
источник
href
атрибутов.$("#myBox").find('a').filter(':not([href])')
РЕДАКТИРОВАТЬ:
Приведенное выше попадет в
else
ветвь, когда онаmyattr
существует, но будет пустой строкой или "0". Если это проблема, вы должны явно проверитьundefined
:источник
undefined
считается крайним случаем, и приведенное выше сравнение будет работать в 99% всех случаев.Я знаю, что прошло много времени с тех пор, как был задан вопрос, но я обнаружил, что проверка была более ясной, как это:
(Как найдено на этом сайте здесь )
Документация об этом может быть найдена здесь
источник
Это будет работать:
источник
$(this).<something>
когда здесь вы можете сделатьthis.hasAttribute('...')
прямо (и не заботитесь о старых браузерах, конечно.)В JavaScript ...
... возвращает
true
*. Это разница между==
и===
. Кроме того, имяundefined
может быть определено (это не ключевое слово, какnull
есть), поэтому вам лучше проверить другим способом. Наиболее надежным способом, вероятно, является сравнение возвращаемого значенияtypeof
оператора.Тем не менее, сравнение с нулем должно работать в этом случае.
* Предполагается,
undefined
что на самом деле не определено.источник
$("input[attr]").length
может быть лучшим вариантом.источник
Несколько идей были отброшены с использованием "typeof", jQuery ".is" и ".filter", поэтому я решил опубликовать быстрое сравнение их. Typeof, кажется, лучший выбор для этого. В то время как другие будут работать, при вызове библиотеки jq для этого усилия, похоже, будет существенная разница в производительности
источник
источник
isset()
или, например, в js$("#element").attr('my_attr') === false
,как и в этом посте , используя
.is
и селектор атрибутов[]
, вы можете легко добавить функцию (или прототип):источник
источник
просто:
больше информации: официальные документы
источник
Помимо выбора всех элементов с атрибутом
$('[someAttribute]')
или$('input[someAttribute]')
вы также можете использовать функцию для выполнения логических проверок объекта, например, в обработчике щелчков:if(! this.hasAttribute('myattr') ) { ...
источник
Я создал пакет npm с предполагаемым поведением, как описано выше в вопросе.
Ссылка на [npm] и [github]
Использование очень просто. Например:
возвращает истину.
Работает с Camelcase тоже.
источник
Чтобы выбрать элементы, имеющие определенный атрибут, см. Ответы выше.
Чтобы определить, имеет ли данный элемент jQuery определенный атрибут, я использую небольшой плагин, который возвращает,
true
если первый элемент в коллекции ajQuery имеет этот атрибут:источник
JQuery вернет атрибут в виде строки. Поэтому вы можете проверить длину этой строки, чтобы определить, установлена ли она:
источник