jQuery中的attr()与data()方法的区别

博客介绍了在jQuery中动态添加data-xx属性的两种方法attr()和data()。attr()方法改变DOM元素的值,data()方法改变jQuery对象的值,其属性值存于内存,可能与视图属性值不一致。强调二者不能混用,从性能考虑,建议用data()进行set和get操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发的过程中,我们可以在html标签中加入自定义属性 data-xx 来存放我们需要的数据,如果我们想动态的添加data-xx属性,在jQuery中有两种方法可以使用.attr()与.data(),但他们又存在区别,如果使用不慎,还可能会造成意想不到的bug。

<html>
<head>
  <meta charset="utf-8">
  <title>测试</title>
  </style>
</head>
<body>
  <div data-id="1234" id="app"></div>

  <script src="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js" charset="utf-8"></script>
  <script>
    var getAttr1 = $("#app").attr("data-id");
    var getData1 = $("#app").data("id");
    console.log(getAttr1); //1234
    console.log(getData1); //1234
    /*attr()设置*/
    $("#app").attr("data-id", "5678");
    var getAttr2 = $("#app").attr("data-id");
    var getData2 = $("#app").data("id");
    console.log(getAttr2); //5678
    console.log(getData2); //1234
    /*data()设置  注意要想出以下效果,先要注释掉上边attr()方法的代码*/
    $("#app").data("id","5678");
    var getAttr3 = $("#app").attr("data-id");
    var getData3 = $("#app").data("id");
    console.log(getAttr3); //1234
    console.log(getData3); //5678
  </script>

</body>
</html>
复制代码

注意要想出效果,先要注释掉上边attr()方法的代码 出现上述问题的代码是因为attr()与data()方法存在原理上的区别

1、attr()方法原理是改变DOM元素的值。

attr()方法直接改变DOM元素上的属性值:

/*data()设置*/
  $('#app').attr('data-id', '5678');
  var getAttr2 = $('#app').attr('data-id');
  var getData2 = $('#app').data('id');
  console.log(getAttr2); //5678
  console.log(getData2); //1234
复制代码

2、data()方法原理是jquery对象的值。

data()方法不会直接改变DOM元素上的属性值,我们观察元素发现:

 /*data()设置*/
$('#app').data('id','5678');
var getAttr3 = $('#app').attr('data-id');
var getData3 = $('#app').data('id');
console.log(getAttr3); //1234
console.log(getData3); //5678
复制代码

所以data()方法由于对象属性值保存在内存中,因此可能和视图里的属性值不一致的情况。
总结:
1、attr()与data()方法不能混用,即不能通过attr()设置属性,再通过data()方法取值。或者不能通过data()设置属性,再通过attr()方法取值。
2、从性能的角度来说,建议使用data()来进行set和get操作,因为它修改的 Jquey对象的属性值,不会引起额外的DOM操作。

转载于:https://juejin.im/post/5cebb9ea6fb9a07eec59a922

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值