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

Как установить атрибут данных без добавления значения в jQuery? Я хочу это:

<body data-body>

Я пробовал:

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

Все остальное, кажется, добавляет второй аргумент в виде строки. Можно ли просто установить атрибут без значения?

Ответ 1

Функция attr() также является функцией setter. Вы можете просто передать ему пустую строку.

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

Пустая строка просто создаст атрибут без значения.

<body data-body>

Ссылка - http://api.jquery.com/attr/#attr-attributeName-value

attr (attributeName, value)

Ответ 2

Возможно, попробуйте:

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

Ответ 3

Принятый ответ не позволяет создавать атрибут только для имени (по состоянию на сентябрь 2017 года).

Вы должны использовать JQuery prop() для создания атрибутов только для имени.

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

Ответ 4

По состоянию на 6/15/2017 я не верю, что это правильно.

Я собрал скрипку, которая продемонстрирует, что в настоящее время (используя jQuery Edge, который вытащил [jQuery JavaScript Library v3.2.2-pre 5bdd1ca1ab6469c5ec9ed7ba8b669b4cacc281d9]), не проявляет вышеуказанного поведения.

Вместо этого, если параметр значения не имеет значения, имя атрибута помещается как значение.

(История) Я попытался добавить атрибут требуемой петли для поля, если соответствующий флажок установлен. Вместо того, чтобы видеть атрибут "required =" "Я видел" required = "required".

Вот ссылка на эту скрипку. https://jsfiddle.net/Jevolz/25whtL83/ (Обновлено Fiddle: доказательство более пустых возможностей строки: https://jsfiddle.net/Jevolz/25whtL83/7/)

HTML:

<input type="checkbox" id="demoCb" />
<input type="text" id="demoTxt" value="Inspect Me!"/>

JavaScript:

$(function(){
    $('#demoCb').on('click', cbChanged);
});


function cbChanged(e){
    var elem = $(e.target);
  var checked = $(elem).is(':checked');
  if(checked){
    $('#demoTxt').attr('required', '');
  }
  else{  
    $('#demoTxt').attr('required', null);
  } 
}

Я обновлю этот пост, если найду эти изменения.

* Примечание 7/17/2017: В некоторых инструментах разработчика браузеров я наблюдаю flaky. Вары, которые я могу правильно вытащить на консоли, не отражаются должным образом в "Inspect Element". Это может объяснить мои наблюдения. Если вы согласитесь, дайте мне знать, и я увижу, как снять этот пост.

Спасибо