使用attr()设置元素属性并获取data()行为

时间:2017-10-30 11:45:34

标签: jquery

我读了这篇关于$ .data和$ .attr

之间使用差异的讨论jQuery Data vs Attr?

其中一个答案说这个

  

使用attr()

设置数据      
      
  • 可从$(元素).attr('data-name')
  • 访问   
  • 可从element.getAttribute('data-name'),
  • 访问   
  • 如果值是数据名称的形式,也可以从$(元素).data(名称)和element.dataset ['name']和   element.dataset.name
  •   
  • 在检查时可见元素
  •   
  • 不能是对象
  •   

我尝试使用attr()设置一个值,然后同时使用attr()和date(),但结果与写入的结果不同。

$(document).on('change', '#sl', function() {
  var selVal = $(this).val();
  $('#txt').removeAttr('data-name');
  $('#txt').attr('data-name', selVal);
  console.log("get by attr " + $('#txt').attr('data-name'));
  console.log("get by data " + $('#txt').data('name')); // get only the first attribute you set
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="sl">
      <option value="foo">foo</option>
      <option value="bar">bar</option>
    </select>

<input id="txt">

如果我错了或者我理解写的是什么,你能解释一下吗?
谢谢

1 个答案:

答案 0 :(得分:1)

.data()使用内部缓存,它仅使用data属性作为默认值。在通过.data(key, value)执行更新操作时,DOM 未更新。此外,在更新.attr(key, value)时,它不会更新缓存。

简而言之,请勿混用.attr().data()