首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法使用jQuery Data()接口设置数据属性

无法使用jQuery Data()接口设置数据属性
EN

Stack Overflow用户
提问于 2011-07-26 17:15:19
回答 2查看 132.8K关注 0票数 131

我在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="" />
EN

回答 2

Stack Overflow用户

发布于 2013-12-03 00:15:11

我也遇到过同样的事情。事实证明,

var data = $("#myObject").data();

给你一个不可写的对象。我用以下命令解决了这个问题:

var data = $.extend({}, $("#myObject").data());

从那时起,data就成了一个标准的、可写的JS对象。

票数 6
EN

Stack Overflow用户

发布于 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;
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6827810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档