jQuery .data()不更新DOM

似乎jQuery 1.7.2没有为我更新DOM数据属性。 鉴于以下标记:

  • ABCDEF

运行下面的JavaScript,我得到一些我不期望的结果:

 $('#foo li:first').data('my-key') // Returns 12345 - Expected $('#foo li[data-my-key="12345"]') // Returns the expected 
  • $('#foo li:first').data('my-key', '54321') $('#foo li:first').data('my-key') // Returns 54321 - Expected $('#foo li[data-my-key="54321"]') // Returns an empty array - Not expected
  • 经过进一步调查,我注意到在使用.data()函数设置新值后未修改DOM(在Chrome 21.0.1180.81,Firebug 1.10.3和Firefox 14.0.1中使用“Inspect Element”validation)。

    从我的角度来看,这种行为是出乎意料的,但这是jQuery数据运行的预期方式吗? 如果是这样,使用jQuery更新data- *属性的适当方法是什么? 只需使用attr()函数?

    $('#foo li[data-my-key="54321"]')是一个属性选择器。

    使用.data(..)更改无法选择的元素属性 ,而不使用filter。

    如果你想获得具有特定属性的所有元素,你可以这样做(使用filter(...) ):

     $('#foo li').filter(function(index) { return $(this).data('my-key') === 54321; }); //returns all `#foo li` with data[my-key] === 54321 

    有关详细信息,请参阅此处: .prop()vs .attr()