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
5

Я не уверен насчет простого селектора, но вы могли бы использовать filter():

$('[data-go-to]').filter(
    function(){
        return ($(this).attr('data-go-to').length > 0);
    });

Демо JS Fiddle .

Ссылки:

Дэвид просит восстановить Монику
источник
2
$('[data-go-to]').filter(function() {
    return $(this).data('go-to')!="";
});

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

FIDDLE

аденео
источник
1

Это работает для меня

$('[attributename]').filter('[attributename!=""]')
Мардок
источник
Однако это две итерации.
Йенс
0

Попробуй это :

$('[data-go-to:not(:empty)]')
Паскаль Бутин
источник
1
Нет. "Syntax error, unrecognized expression: [data-go-to:not(:empty)]"
Шпигфорд
api.jquery.com/empty-selector api.jquery.com/not-selector В соответствии с этим, должно быть, должно работать, к сожалению, это было бы чистое решение!
Паскаль Бутин
0

Это работает для меня:

$('.data .title td[data-field!=""]')
ВКонтакте
источник