【问题标题】:changing data attribute isn't working更改数据属性不起作用
【发布时间】:2013-10-22 22:43:21
【问题描述】:

我正在尝试更改数据属性,但它似乎从未被更改并保持为“TEXT”,这是默认设置。

function SuccessGetActorsForGroupCallback(data, el) {
    var str = "";
    jQuery.each(data, function (i, val) {
        str += val + '<br />';
    });

    $(el).data('original-title', str);
    Utilities.ApplyTooltips($(el));
}

请帮忙

【问题讨论】:

  • .data 方法不会改变data- HTML 属性;它改变了 jQuery 内部存储的变量。
  • 没有足够的信息来回答这个问题。 Utilities.ApplyTooltips 有什么作用?标记是什么样的?
  • 多一点上下文会有所帮助。 data 长什么样,ApplyTooltips 有什么作用?

标签: jquery


【解决方案1】:

.data 方法不会改变data- HTML 属性;它改变了 jQuery 内部存储的变量。

如果您确实需要/想要更改 data- 属性,请使用 .attr() 方法明确地这样做:

$(el).attr('data-original-title', str); 

但是,这不会改变.data 返回的值。 jQuery 将从data- HTML 属性中获取该值只有在它无法找到内部存储的值。如果你在修改了 HTML 属性后再次检索$(el).data('original-title'),你会发现它并没有改变。

如果 this 有问题,请使用.removeData() 方法删除内部存储的值。下次使用.data() 时,jQuery 会发现它丢失并检索data- HTML 属性。

看一看:http://jsfiddle.net/mblase75/LHCUK/


HTML:

<p id="p" data-title="blah"></p>

jQuery:

console.log($('#p').data('title')); // returns "blah"

// alter the attribute directly
$('#p').attr('data-title','whooo'); // data-title="whooo"
// test if .data is changed
console.log($('#p').data('title')); // still returns "blah"

// delete the .data() value
$('#p').removeData('title');
// now fetch it again -- it will retrieve the new data- attribute
console.log($('#p').data('title')); // returns "whooo"

现在,在实践中,您不必担心这一点。请记住data- 属性代表.data() 变量的初始 值,而不一定是该变量的当前 值,你会没事的。

总结: .data() 方法在文档加载时一次从 HTML 元素中检索一个值,并且不会这样做所以只要变量存储在内部。

【讨论】:

    【解决方案2】:

    您的代码:$(el).data('original-title', str);
    应该是:$(el).attr('data-original-title', str);

    .attr(); 用于在键值对中使用时更改属性。

    Documentation here

    【讨论】:

    • 可能需要是 'data-original-title'
    • 我基本上把他指定的内容放在那里,我认为这一点已经很清楚了。但是我编辑了我的答案,谢谢你的提示!
    猜你喜欢
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2020-01-21
    • 2014-07-21
    • 2012-11-17
    相关资源
    最近更新 更多