jQuery: Виберіть атрибути даних, які не є порожніми?


95

Я намагаюся виділити всі елементи, які мають data-go-toатрибут, який не є порожнім.

Я намагався, $('[data-go-to!=""]')але як не дивно, здається, я вибираю кожен окремий елемент сторінки, якщо я це роблю.

Відповіді:


76

спробуй

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

ОНОВЛЕННЯ:

Щоб нікого не збити, ця відповідь буде працювати у старих версіях jQuery, але не є надійною для майбутнього. Оскільки відповіді @gmo та @ siva, схоже, працюють із пізнішими версіями, я відкладаю (і закликаю вас проголосувати) їх відповіді .... і звичайно сподіваюся, у вас є фантастичний день.


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

2
Чи не вибрано це всі елементи, які не мають порожнього атрибута data-to-go? Коли запитувач хоче всі елементи з цим атрибутом, які не є порожніми? (як вирішує відповідь Шиви
Чарана

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

2
Це отримує кожен елемент для мене, включаючи той, що має атрибут data, який я шукаю
адвокат диявола

Здається, це не працює в Safari, але $('[data-go-to!=""]:[data-go-to]')працює.
Дан

184

Подібно до того , як подальше використання, і уточнений (may'14) (aug'15) (sep'16) (apr'17) (mar'18) (mar'19) ( may'20 ) ...
Відповідь, яка працює з:

Порожні рядки:

Якщо повинен існувати і міг мати якесь значення (або взагалі не має значення )attr

    jQuery("[href]");

Відсутні атрибути:

Якщо міг існувати і якщо існує, повинен мати якесь значення attr

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

Або обидва:

Якщо має існувати і має мати якесь значення ... attr

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

PS : можливо більше комбінацій ...


Перевірте цей тест у jsFiddle для прикладів:


Або тут у SO з цим фрагментом коду .

* Фрагмент запущений jQuery v2.1.1


6
це воно. Проголосуйте за цього користувача прямо тут. інші старші відповіді для мене не працюють. Я використав третій приклад.
Валамас

Відряджений @ Valamas-AUS
Адам Уейт

Редагувати: Додано фрагмент коду SO, тому ви можете протестувати його тут.
gmo

Це той, який працює. $(':not([data-go-to=""])')вже не працює
Матьє Шарбоньє

1
Дякуємо за підтримку відповіді
Anthony C

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]')

Приклад JS Fiddle


1
Це єдина відповідь, яка все ще працює для мене в червні 2015 року.
AlexioVay,




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

Використання :not, .not()та :emptyінше лише перевірить, чи порожній сам елемент, а не атрибут data. Для цього вам доведеться фільтрувати на основі значення атрибутів даних.

Скрипка




Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.