You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue中DOM已更新,但读取data属性仍为初始值的原因?

问题原因

jQuery的data()方法存在缓存机制:第一次调用$('#test5').data('range')时,它会读取DOM上的data-range属性值并缓存到内存中。后续再调用data('range'),只会返回缓存的初始值,不会主动同步DOM属性的更新——哪怕你在控制台能看到DOM上的data-range已经变了,data()还是拿旧的缓存值。

解决方案

这里有三种可行的处理方式:

1. 直接读取DOM属性(最直接)

改用jQuery的attr()方法,它会直接从DOM元素上读取最新的data-range属性值,不会依赖缓存:

this.options.vue.$on('xps-updated', function(){
  this.options.vue.$nextTick(function(){
    console.log($('#test5').attr('data-range')) // 能获取到更新后的值
  }.bind(this))
}.bind(this));

2. 手动更新jQuery的data缓存

如果你一定要用data()方法,可以在Vue更新DOM后,手动把新值同步到jQuery的缓存里:

this.options.vue.$on('xps-updated', function(){
  this.options.vue.$nextTick(function(){
    const $el = $('#test5');
    // 先读取最新的DOM属性值,再更新缓存
    const newRange = $el.attr('data-range');
    $el.data('range', newRange);
    console.log($el.data('range')); // 现在能拿到更新后的值
  }.bind(this))
}.bind(this));

3. 直接从Vue实例获取值(最符合Vue思想)

既然是Vue应用,完全没必要绕去DOM上读值——直接从Vue实例的data中获取最新的height_min并拼接即可,这是最高效也最符合Vue数据驱动理念的方式:

this.options.vue.$on('xps-updated', function(){
  const rangeVal = this.options.vue.form.appearence.height_min + '/7';
  console.log(rangeVal); // 直接拿Vue数据,无需操作DOM
}.bind(this));

内容的提问来源于stack exchange,提问作者Luca Reghellin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 01:06:30