更改数据属性不起作用

时间:2013-10-22 14:14:10

标签: jquery

我正在尝试更改数据属性,但它似乎永远不会被更改并保持为“TEXT”,这是默认值。

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

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

请帮忙

2 个答案:

答案 0 :(得分:36)

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

如果您确实需要/想要更改data-属性,请使用.attr()方法明确执行此操作:

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

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

如果是个问题,请使用.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元素 一次 中检索一个值,并且只要变量存储在内部,就不要再这样做了。

答案 1 :(得分:2)

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

如果在键 - 值对中使用,

.attr();用于更改属性。

Documentation here