Ответ 1
Вы имеете в виду, можете ли вы их выбрать? Если да, то да:
$(":checkbox[myattr]")
У меня есть набор флажков с сгенерированными идентификаторами, а некоторые из них имеют дополнительный атрибут. Можно ли использовать JQuery для проверки того, имеет ли элемент определенный атрибут? Например, могу ли я проверить, имеет ли следующий элемент атрибут "myattr"? Значение атрибута может меняться.
<input type="checkbox" id="A" myattr="val_attr">A</input>
Например, как я могу получить набор всех флажков, у которых есть этот атрибут, не проверяя один за другим? Возможно ли это?
Вы имеете в виду, можете ли вы их выбрать? Если да, то да:
$(":checkbox[myattr]")
if ($('#A').attr('myattr')) {
// attribute exists
} else {
// attribute does not exist
}
EDIT:
Вышеприведенное относится к else
-branch, когда 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"
Тем не менее, сравнение с нулем должно работать в этом случае.
* Предполагая undefined
на самом деле undefined.
Это будет работать:
$('#A')[0].hasAttribute('myattr');
$("input[attr]").length
может быть лучшим вариантом.
Несколько идей были брошены вокруг, используя "typeof", jQuery ".is" и ".filter", поэтому я подумал, что я опубликую быстрое сравнение с ними. Для этого лучше всего подходит тип. В то время как другие будут работать, по-видимому, существует четкая разница в производительности при вызове библиотеки jq для этих усилий.
$("input#A").attr("myattr") == null
просто:
$('input[name*="value"]')
Дополнительная информация: официальные документы
В дополнение к выбору всех элементов с атрибутом $('[someAttribute]')
или $('input[someAttribute]')
вы также можете использовать функцию для выполнения логических проверок для объекта, например, в обработчике кликов:
if(! this.hasAttribute('myattr') ) { ...
if (!$("#element").attr('my_attr')){
//return false
//attribute doesn't exists
}
Я создал пакет npm с предполагаемым поведением, как описано выше.
Использование очень простое. Например:
<p id="test" class="test">something</p>
$("#test").hasAttr("class")
возвращает true.
Работает с верблюжьей линией.
JQuery вернет атрибут в виде строки. Поэтому вы можете проверить длину этой строки, чтобы определить, установлено ли:
if ($("input#A").attr("myattr").length == 0)
return null;
else
return $("input#A").attr("myattr");