Подтвердить что ты не робот

Как я могу получить элементы без определенного атрибута jQuery

Я знаю, как получить элементы с определенным атрибутом:

$("#para [attr_all]")

Но как я могу получить элементы БЕЗ определенного атрибута? Я пытаюсь

 $("#para :not([attr_all])")

Но это не сработает. Каков правильный способ сделать это?

Позвольте мне привести пример:

<div id="para">
    <input name="fname" optional="1">
    <input name="lname">
    <input name="email">
</div>

JQuery

$("#para [optional]") // give me the fname element  
$("#para :not([optional])") //give me the fname, lname, email (fname should not appear here)  
4b9b3361

Ответ 1

Первое, что приходит мне на ум (возможно, оптимальное):

$('p').filter(function(){
    return !$(this).attr('attr_all');
});

Однако p:not([attr_all]) должен работать, поэтому я думаю, что в вашем коде происходит что-то еще.

Ответ 2

Если ваш пример кода - это точный код, который вы используете, я думаю, что проблема - странное пространство.

$("#para :not([attr_all])")

должен быть

$("#para:not([attr_all])")

Если вы оставите там пробел, он выбирает потомки #para.

Ответ 3

Более быстрый способ сделать это - сначала получить все элементы с идентификатором para (который является недопустимым HTML, если их несколько, подумайте об использовании класса) и используйте фильтр (или найдите в зависимости от того, как HTML), чтобы получить только элементы без атрибута:

$('#para').filter(':not([attr_all])');

У вас есть jQuery, делайте гораздо меньше работы, потому что вы только зацикливаете меньший поднабор элементов, чтобы получить те, у которых нет атрибута. Выполнение этого с помощью одного оператора селектора, например $("#para :not([attr_all])"), приведет к тому, что jQuery получит все элементы без атрибута, а затем отфильтрует их для тех, у которых есть идентификатор параграфа.

Ответ 4

Попробуйте $("#para [attr!=val]").

Ваш :not действительно должен работать, хотя, что заставляет меня подозревать, что что-то еще происходит.

Полный список селекторов атрибутов см. в jQuery Selectors docs.

Ответ 5

Ответ Франка Дероса о правильном, но поскольку OP хочет найти потомков, он немного выключен. Попытавшись самостоятельно, кажется, что он должен работать так, как есть, но возможно, что все, что вы используете, не нравится, когда оператор ":" используется непосредственно как потомок. Попробуйте использовать

$("#para input:not([optional])")

Оставил комментарий, но пока не может.