我在MVC视图上有以下字段:
@Html.TextBoxFor(model => model.Course.Title, new { data_helptext = "Old Text" })</span>
在单独的js文件中,我希望将data-helptext
属性设置为字符串值。下面是我的代码:
alert($(targetField).data("helptext"));
$(targetField).data("helptext", "Testing 123");
alert()
调用运行良好,它在一个警告对话框中显示文本"Old Text“。但是,将data-helptext
属性设置为“Test123”的调用不起作用。“旧文本”仍然是属性的当前值。
我是否错误地使用了对data()的调用?我已经在网上查过了,我看不出我做错了什么。
下面是HTML标记:
<input data-helptext="Old Text" id="Course_Title" name="Course.Title" type="text" value="" />
发布于 2013-12-03 00:15:11
我也遇到过同样的事情。事实证明,
var data = $("#myObject").data();
给你一个不可写的对象。我用以下命令解决了这个问题:
var data = $.extend({}, $("#myObject").data());
从那时起,data
就成了一个标准的、可写的JS对象。
发布于 2015-11-25 04:10:54
也有同样的问题。由于仍然可以使用.data()方法获取数据,因此只需找出一种写入元素的方法。这是我使用的辅助方法。正如大多数人所说,你将不得不使用.attr。我让它将any _替换为-据我所知它是这样做的。我不知道任何其他的字符,它replaces...however,我没有研究过。
function ExtendElementData(element, object){
//element is what you want to set data on
//object is a hash/js-object
var keys = Object.keys(object);
for (var i = 0; i < keys.length; i++){
var key = keys[i];
$(element).attr('data-'+key.replace("_", "-"), object[key]);
}
}
编辑:2017年5月1日
我发现仍然存在使用内置方法无法获得正确数据的情况,因此我现在使用的方法如下:
function setDomData(element, object){
//object is a hash
var keys = Object.keys(object);
for (var i = 0; i < keys.length; i++){
var key = keys[i];
$(element).attr('data-'+key.replace("_", "-"), object[key]);
}
};
function getDomData(element, key){
var domObject = $(element).get(0);
var attKeys = Object.keys(domObject.attributes);
var values = null;
if (key != null){
values = $(element).attr('data-' + key);
} else {
values = {};
var keys = [];
for (var i = 0; i < attKeys.length; i++) {
keys.push(domObject.attributes[attKeys[i]]);
}
for (var i = 0; i < keys.length; i++){
if(!keys[i].match(/data-.*/)){
values[keys[i]] = $(element).attr(keys[i]);
}
}
}
return values;
};
https://stackoverflow.com/questions/6827810
复制相似问题