Как установить атрибуты в HTML-элементы
у меня есть div с атрибутом data-myval = "10". Я хочу обновить его значение; не изменится ли оно, если я использую div.data('myval',20)? Нужно ли мне использовать div.attr('data-myval','20') только?
я путаюсь между HTML5 и jQuery? Посоветуйте, пожалуйста. Спасибо!
редактировать: обновлен div.data('myval')=20 до div.data('myval',20), но все равно HTML не обновляется.
6 ответов:
HTML
<div id="mydiv" data-myval="10"></div>JS
var a = $('#mydiv').data('myval'); //getter $('#mydiv').data('myval',20); //setterизменить (после комментария):
если вы проверите ссылку, приведенную выше, в которой говорится:
сам jQuery использует
.data()метод сохранения информации под именами ' events 'и' handle', а также резервирует любое имя данных, начинающееся с подчеркивания ( ' _ ' ) для внутреннего использовать.зачем вам нужно менять html?
если изменение html абсолютно необходимо, вы должны использовать
.attr()HTML
<div id="outer"> <div id="mydiv" data-myval="10"></div> </div>JS:
alert($('#outer').html()); // alerts <div id="mydiv" data-myval="10"> </div> var a = $('#mydiv').data('myval'); //getter $('#mydiv').attr("data-myval","20"); //setter alert($('#outer').html()); //alerts <div id="mydiv" data-myval="20"> </div>посмотреть демо
обратите внимание, что jQuery
.data()не обновляется при изменении html5data-атрибуты с javascript.если вы используете jQuery
.data()установитьdata-атрибуты в HTML элементах вам лучше использовать jQuery.data()читать их. В противном случае при динамическом обновлении атрибутов могут возникнуть несоответствия. Например, см.setAttribute(),dataset(),attr()ниже. Измените значение, нажмите кнопку несколько раз и посмотрите приставка.$("#button").on("click", function() { var field = document.querySelector("#textfield") switch ($("#method").val()) { case "setAttribute": field.setAttribute("data-customval", field.value) break; case "dataset": field.dataset.customval = field.value break; case "jQuerydata": $(field).data("customval", field.value) break; case "jQueryattr": $(field).attr("data-customval", field.value) break; } objValues = {} objValues['$(field).data("customval")'] = $(field).data("customval") objValues['$(field).attr("data-customval")'] = $(field).attr("data-customval") objValues['field.getAttribute("data-customval")'] = field.getAttribute("data-customval") objValues['field.dataset.customval'] = field.dataset.customval console.table([objValues]) })<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <h1>Example</h1> <form> <input id="textfield" type="text" data-customval="initial"> <br/> <input type="button" value="Set and show in console.table (F12)" id="button"> <br/> <select id="method"> <option value="setAttribute">setAttribute</option> <option value="dataset">dataset</option> <option value="jQuerydata">jQuery data</option> <option value="jQueryattr">jQuery attr</option> </select> <div id="results"></div> </form>
вы также можете использовать следующие
attrштука;HTML
<div id="mydiv" data-myval="JohnCena"></div>скрипт
$('#mydiv').attr('data-myval', 'Undertaker'); // sets $('#mydiv').attr('data-myval'); // getsили
$('#mydiv').data('myval'); // gets value $('#mydiv').data('myval','John Cena'); // sets value
ваниль Javascript решение
HTML
<div id="mydiv" data-myval="10"></div>JavaScript:
используя
getAttribute()свойстваvar brand = mydiv.getAttribute("data-myval")//returns "10" mydiv.setAttribute("data-myval", "20") //changes "data-myval" to "20" mydiv.removeAttribute("data-myval") //removes "data-myval" attribute entirelyиспользуя JavaScript
datasetсвойстваvar myval = mydiv.dataset.myval //returns "10" mydiv.dataset.myval = '20' //changes "data-myval" to "20" mydiv.dataset.myval = null //removes "data-myval" attribute
если вы используете jQuery, используйте
.data():div.data('myval', 20);вы можете хранить произвольные данные с
.data(), но вы ограничены только строки при использовании.attr().
[jQuery].данных() против .attr () vs .extend ()
метод jQuery
.data()обновляет внутренний объект, управляемый jQuery с помощью метода, если я прав.если вы хотите обновить свой
data-attributesС некоторым распространением, используйте --$('body').attr({ 'data-test': 'text' });-- иначе
$('body').attr('data-test', 'text');будет работать нормально.еще один способ, которым вы могли бы сделать это с помощью --
$.extend( $('body')[0].dataset, { datum: true } );-- что ограничивает любое изменение атрибута
HTMLElement.prototype.dataset, нет никаких дополнительныхHTMLElement.prototype.attributes.
Comments