jQuery: выбрать непустые атрибуты данных?


96

Я пытаюсь выбрать все элементы, у data-go-toкоторых есть непустой атрибут.

Я пробовал, $('[data-go-to!=""]')но, как ни странно, кажется, что если я это сделаю, он выбирает каждый элемент на странице.

Ответы:


77

пытаться

$(':not([data-go-to=""])')

ОБНОВИТЬ:

Чтобы никого не сбить с пути, этот ответ будет работать в более старых версиях jQuery, но не пригоден для будущего. Поскольку ответы @gmo и @ siva, похоже, работают с более поздними версиями, я полагаюсь на их ответы (и призываю вас проголосовать за них) ... и, конечно, надеюсь, что у вас фантастический день.


спасибо, это сработало отлично! Я хотел выбрать только элементы изображения, поэтому добавил $ (': not (img [data-go-to == ""]')
msanjay 04

2
Разве при этом не выбираются все элементы, у которых нет пустого атрибута «данные на ходу»? Когда спрашивающий хочет, чтобы все элементы с этим атрибутом не были пустыми? (как решает ответ Шивы Чарана)
rodnaph

на самом деле не нужны двойные кавычки ... как в $('element:not([attribute=])'); // gets all of <element attribute="">или$(':not([attribute=])'); // gets all of <* attribute="">
Энтони Хацопулос

2
Это получает каждый элемент для меня, включая тот, который имеет атрибут данных, который я ищу
Адвокат дьявола

В Safari вроде не работает, но $('[data-go-to!=""]:[data-go-to]')работает.
Дэн

186

Так же в качестве дополнительной ссылки и актуального (май'14) (авг'15) (сен'16) (апр'17) (мар'18) (мар'19) ( май'20 ) ...
Ответ, который работает с:

Пустые строки:

Если должно существовать и иметь какое-либо значение (или вообще не иметь )attr

    jQuery("[href]");

Отсутствующие атрибуты:

Если может существовать и если существует, должно иметь какое-то значение attr

    jQuery("[href!='']");

Или оба:

Если должно существовать и иметь какую-то ценность ... attr

    jQuery("[href!=''][href]");

PS : возможны другие комбинации ...


Посмотрите этот тест в jsFiddle для примеров:


Или здесь, в SO с этим фрагментом кода .

* Фрагмент работает под управлением jQuery v2.1.1


6
это оно. Проголосуйте за этого пользователя прямо здесь. другие старые ответы не работают для меня. Я использовал третий пример.
Valamas

Seconded @ Valamas-AUS
Адам Уэйт

Изменить: добавлен фрагмент кода SO, поэтому вы можете протестировать его прямо здесь.
gmo

Это тот, который работает. $(':not([data-go-to=""])')больше не работает
Matthieu Charbonnier

1
Спасибо за актуальный ответ
Энтони Си,

19
$('[data-go-to!=""]:[data-go-to]').each(function() {
    // Do Your Stuff
});​

6
Этот работает для пустых строк и отсутствующих атрибутов, отлично
adamJLev

4
по состоянию на 14 мая не работает, выдает Unrecognized Expressionошибку.
coding_idiot

7

Имеет атрибут data-attributename и его значение не пусто:

$('[data-attributename]:not([data-attributename=""])')

Пустой атрибут data-attributename или нет:

$('[data-attributename]')

Пример JS Fiddle


1
Это единственный ответ, который все еще работает для меня в июне 2015 года.
AlexioVay 02




2
$('[data-go-to]').filter(function() {
    return $(this).data('go-to')!="";
});

Использование :not, .not()и :emptyт. Д. Будет проверять только пустой ли элемент, а не атрибут данных. Для этого вам нужно будет выполнить фильтрацию по значению атрибутов данных.

FIDDLE




Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.