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

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

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

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

Ответ 1

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

$(":checkbox[myattr]")

Ответ 2

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
}

Ответ 3

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

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

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

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

Ответ 4

В JavaScript,...

null == undefined

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

typeof o == "undefined"

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

* Предполагая undefined на самом деле undefined.

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

Ссылка на [npm] и [github]

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

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

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

Работает с верблюжьей линией.

Ответ 13

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

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