Выберите элементы с пустым или не указанным атрибутом - PullRequest
6 голосов
/ 02 апреля 2011

Возьмем следующий схематический html-код:

<div>
  <span id='1' cust-attr='' />
  <span id='2' />
  <span id='3' cust-attr='Foo' />
</div>

Теперь я ищу селектор, который находит все span, которые либо не имеют атрибута "cust-attr", либо значение которых "cust-attr" пусто. В этом случае это будут 1 и 2.

Я пробовал следующие селекторы со следующими результатами:

  1. span[cust-attr!=] выбирает 2 и 3
  2. span[cust-attr=''] только выбирает 1
  3. span:not([cust-attr]) выбирает 2
  4. span(:not([cust-attr]),[cust-attr='']) выбирает все три
  5. span([cust-attr=''],:not([cust-attr])) выбирает 1

Однако я не нашел один, выбирающий только 1 и 2.
Знаете ли вы возможность?

Обратите внимание, что я хочу избежать:

span:not([cust-attr]),span[cust-attr='']

как «span» на самом деле является более сложным выражением.

Ответы [ 3 ]

6 голосов
/ 19 августа 2015

Поздно на вечеринку ...

... или вы можете использовать CSS-селекторы и быть в 10 раз быстрее, чем оба jQuery отвечают ...:)

document.querySelectorAll("input:not([id]), input[id='']");

Proof

5 голосов
/ 02 апреля 2011

По сути, не надо.

Не стоит помещать всю логику в селектор.Это в конечном итоге будет очень дорогим в вычислительном отношении (потому что части должны быть проанализированы из строки, прежде чем они будут интерпретированы) и грязным.Вместо этого используйте красоту метода filter:

$('span')
    .filter(function(){
        return !$(this).attr('cust-attr');
    });

При этом удаляются все элементы, где cust-attr - непустая строка из выделения.

3 голосов
/ 02 апреля 2011

Почему бы просто не выбрать сначала все SPAN, а затем отфильтровать выбор? Э.Г.

$('span').filter('[cust-attr=""],:not([cust-attr])')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...