Встановити атрибут без значення


194

Як встановити атрибут даних, не додаючи значення в jQuery? Я хочу це:

<body data-body>

Я намагався:

$('body').attr('data-body'); // this is a getter, not working
$('body').attr('data-body', null); // not adding anything

Все інше, здається, додає другі аргументи як рядок. Чи можна просто встановити атрибут без значення?


3
Навіщо вам потрібен data-bodyVS. data-body=""?
Вибухові таблетки

Принаймні, якщо ви хочете використовувати XHTML, ви не повинні робити цього, оскільки мінімізація атрибутів не дозволена.
Маттіас

9
Я не використовую XHTML, я використовую HTML5
Девід Хеллінг

2
@ user1689607, тому що я зберігаю згенерований HTML як рядок і мені потрібно потім зробити зворотний пошук.
Девід Гелсінг

4
@ExplosionPills Одним із прикладів є requiredатрибут перевірки форми HTML5. Я впевнений, що існує багато інших дійсних випадків використання.
Zero3

Відповіді:


251

Ця attr()функція також є функцією сеттера. Ви можете просто передати це порожнім рядком.

$('body').attr('data-body','');

Порожній рядок просто створить атрибут без значення.

<body data-body>

Довідка - http://api.jquery.com/attr/#attr-attributeName-value

attr (attributeName, value)


24
+1, але ОП знає, що це сетер. Те, що передача порожньої рядки працює, але nullне є дещо дивовижним.
Джон

2
Javasctipt має деякі дивні поведінки . Знаючи, де трапляються ці дивацтва, виведе елемент
надмірності

25
Примітка. Це не працює з jQuery 1.7.2 (я знаю, що це не остання версія), але з використанням $(el).prop('data-body', true)працював для мене там, де $(el).attr('data-body', '')закінчилося встановлення для мене data-body = "data-body".
Патрік О'Дохерті

6
@ PatrickO'Doherty $(el).prop('data-body', true)для мене не працює. attr()працює, але він також додає порожній рядок як значення атрибута, який я хочу додати.
Webdevotion

1
@Andrew Я вважаю, що ви шукаєте функції removeAttr / prop . Це залежить від того, який атрибут ви намагаєтеся видалити.
Лікс

47

Можливо, спробуйте:

var body = document.getElementsByTagName('body')[0];
body.setAttribute("data-body","");

2
Тільки це рішення працювало для менеvar btn = $(this).get(0); btn.setAttribute("disabled","");
gkiko

1
Розгубившись з .attr та .prop, як це було запропоновано у всіх інших рішеннях та коментарях, я нарешті виявив, що повертаючись назад (або принаймні "на півдорозі" назад) до рідного JS, зробив трюк, як було запропоновано в коментар вище ... Ура за це!
TheCuBeMan

22

Загальноприйнятий відповідь не створити атрибут ім'я тільки більше (за станом на вересень 2017 року).

Ви повинні використовувати метод JQuery prop () для створення атрибутів лише імен.

$(body).prop('data-body', true)

Насправді, мені здається, що ви додаєте "value = 'true" до мого вибору, а не просто "value". Тьфу.
RonLugge

мені було цікаво, як прийнята відповідь не містить цього рішення! це найчистіший спосіб використання jquery.
денс

Не працює у виборі параметрів, що випадають, у Chrome на жаль
MC9000

7

Ви можете це зробити без jQuery!

Приклад:

document.querySelector('button').setAttribute('disabled', '');
<button>My disabled button!</button>

Щоб встановити значення булевого атрибута, наприклад відключеного, можна вказати будь-яке значення. Порожній рядок або ім’я атрибута - рекомендовані значення. Важливо лише те, що якщо атрибут взагалі присутній, незалежно від його фактичного значення, його значення вважається істинним. Відсутність атрибута означає, що його значення хибне. Встановлюючи значення атрибута вимкнено в порожній рядок (""), ми встановлюємо відключений значення true, внаслідок чого кнопку відключається.

Від MDN Element.setAttribute ()


1
jQuery в цьому плані занадто лускатий. Найкраще робити в JavaScript, щоб не зводити з розуму щоразу, коли змінюються jquery або браузери. Це стосується всіх цих баггічних систем клієнта.
MC9000

1

Не впевнений, чи справді це вигідно чи чому я віддаю перевагу цьому стилю, але те, що я роблю (у ванільному js):

document.querySelector('#selector').toggleAttribute('data-something');

Це додасть атрибут у всі малі регістри без значення або видалить його, якщо він вже існує на елементі.

https://developer.mozilla.org/en-US/docs/Web/API/Element/toggleAttribute

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