属性を持つdivがありますdata-myval = "10"
。その値を更新したい。使ったら変わらないdiv.data('myval',20)
?使用するdiv.attr('data-myval','20')
だけでいいですか?
HTML5とjQueryの間で混乱していますか?お知らせ下さい。ありがとう!
編集:に更新されましdiv.data('myval')=20
たdiv.data('myval',20)
が、それでも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は更新されていません。
HTML
<div id="mydiv" data-myval="10"></div>
JS
var a = $('#mydiv').data('myval'); //getter
$('#mydiv').data('myval',20); //setter
参照から:
jQuery自体は、この
.data()
メソッドを使用して「events」および「handle」という名前で情報を保存し、内部使用のためにアンダースコア(「_」)で始まるデータ名も予約します。
jQueryはHTMLの属性をdata()
変更しないことに注意してください。data
したがって、data
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>
このデモを見る
HTML
<div id="mydiv" data-myval="10"></div>
JavaScript:
DOMの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
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
.data()
javascriptでhtml5data-
属性を変更しても、jQueryは更新されないことに注意してください。
jQueryを使用してHTML要素に属性.data()
を設定する場合は、jQueryを使用して属性を読み取る方が適切です。そうしないと、属性を動的に更新するときに不整合が生じる可能性があります。たとえば、以下の、を参照してください。値を変更し、ボタンを数回押してコンソールを確認します。data-
.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>
jQueryを使用している場合は、次を使用します.data()
。
div.data('myval', 20);
を使用して任意のデータを格納できますが.data()
、を使用する場合は文字列のみに制限されます.attr()
。
jQueryとDOMの同期を維持するための簡単なオプションは、次のとおりです。
$('#mydiv').data('myval',20).attr('data-myval',20);
.data()
私が正しければ、jQueryメソッドは、メソッドを使用して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
、に制限します。
data-属性を設定する別の方法は、datasetプロパティを使用することです。
<div id="user" data-id="1234567890" data-user="johndoe" data-date-of-birth>John Doe</div>
const el = document.querySelector('#user');
// el.id == 'user'
// el.dataset.id === '1234567890'
// el.dataset.user === 'johndoe'
// el.dataset.dateOfBirth === ''
// set the data attribute
el.dataset.dateOfBirth = '1960-10-03';
// Result: el.dataset.dateOfBirth === 1960-10-03
delete el.dataset.dateOfBirth;
// Result: el.dataset.dateOfBirth === undefined
// 'someDataAttr' in el.dataset === false
el.dataset.someDataAttr = 'mydata';
// Result: 'someDataAttr' in el.dataset === true