如何在HTML元素中设置数据属性

Pul*_*tal 203 html jquery custom-data-attribute

我有一个属性的div data-myval = "10".我想更新它的价值; 如果我使用它会不会改变div.data('myval',20)?我div.attr('data-myval','20')只需要使用吗?

我在HTML5和jQuery之间感到困惑吗?请指教.谢谢!

编辑:更新div.data('myval')=20div.data('myval',20),但仍然不支持HTML代码更新.

Jas*_*ant 403

HTML

<div id="mydiv" data-myval="10"></div>
Run Code Online (Sandbox Code Playgroud)

JS

var a = $('#mydiv').data('myval'); //getter

$('#mydiv').data('myval',20); //setter
Run Code Online (Sandbox Code Playgroud)

演示

参考

来自参考:

jQuery本身使用该.data()方法在名称'events'和'handle'下保存信息,并保留任何以下划线('_')开头的数据名供内部使用.

应该注意的是,jQuery data()不会改变dataHTML中的属性.

因此,如果您需要更改dataHTML中的属性,则应使用.attr().

HTML

<div id="outer">
    <div id="mydiv" data-myval="10"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

这个演示

  • http://jsfiddle.net/pulkitm/Se5Zu/1/你看到html没有更新吗? (7认同)
  • @Jashwant可能是一个有用的编辑:想到一个css规则,如`[data-myval ="10"] {color:red; },它会根据data属性的值设置标记的样式. (7认同)
  • .data不起作用。.attr作品。也许我们可以编辑答案以使其清楚。似乎第一个是解决方案,但可能会更好一些。我不确定如何更好地解释,这就是为什么我不编辑帖子的原因。 (3认同)
  • @Gaucho .data 仅在您使用较新的 jQuery &gt;= 1.4.3 时才有效,对于旧版本 .attr 才有效。 (2认同)

Baq*_*qvi 35

你也可以使用以下attr东西;

HTML

<div id="mydiv" data-myval="JohnCena"></div>
Run Code Online (Sandbox Code Playgroud)

脚本

 $('#mydiv').attr('data-myval', 'Undertaker'); // sets 
 $('#mydiv').attr('data-myval'); // gets
Run Code Online (Sandbox Code Playgroud)

要么

$('#mydiv').data('myval'); // gets value
$('#mydiv').data('myval','John Cena'); // sets value
Run Code Online (Sandbox Code Playgroud)

  • 对我来说只与.attr一起工作.这甚至可能吗? (5认同)

Joh*_*ria 33

请注意,.data()当您data-使用javascript 更改html5 属性时,jQuery 不会更新.

如果使用jQuery 在HTML元素中.data()设置data-属性,最好使用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])
})
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)


raj*_*wat 26

香草Javascript解决方案

HTML

<div id="mydiv" data-myval="10"></div>
Run Code Online (Sandbox Code Playgroud)

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
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用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
    
    Run Code Online (Sandbox Code Playgroud)


Ble*_*der 8

如果您使用的是jQuery,请使用.data():

div.data('myval', 20);
Run Code Online (Sandbox Code Playgroud)

您可以使用存储任意数据.data(),但在使用时仅限于字符串.attr().

  • 请注意,`.data()`方法确实_not_更新`data -`_attributes_ - 也就是说,它存储的数据不会在属性中结束(这就是为什么它可以存储非字符串值),即使它可以检索来自`data-`属性的值.虽然我怀疑OP并不真的需要设置_attributes_,即使这就是问题所在. (13认同)

Cod*_*ody 6

[jQuery] .data() vs .attr() vs .extend()

jQuery 方法.data()通过使用jQuery 方法更新由 jQuery 管理的内部对象,如果我是正确的。

如果你想data-attributes用一些点差更新你的,请使用——

$('body').attr({ 'data-test': 'text' });
Run Code Online (Sandbox Code Playgroud)

- 否则,$('body').attr('data-test', 'text');将工作得很好。

另一种方法是使用-

$.extend( $('body')[0].dataset, { datum: true } );
Run Code Online (Sandbox Code Playgroud)

- 将任何属性更改限制为HTMLElement.prototype.dataset而不是任何额外的HTMLElement.prototype.attributes


小智 5

为了保持 jQuery 和 DOM 同步,一个简单的选择可能是

$('#mydiv').data('myval',20).attr('data-myval',20);        
Run Code Online (Sandbox Code Playgroud)