我有这个HTML代码:
<input type = "button" id = "someID" data-ddd='{"a": 1, "b": "2"}' onclick = "someevent(this)" />
活动实施:
function someevent(element) {
var d = $.parseJSON(element.data("ddd"));
alert(d.a);
}
在这一行上:
var d = $.parseJSON(element.data("ddd"));
我收到以下错误:
TypeError:element.data不是函数
知道为什么我会收到上述错误吗?
最佳答案
在您的代码中,element
是一个HTMLInputElement
对象。与其他.data()
对象不同,它没有HTMLElement
方法。如果要使用jQuery .data()
方法,则应首先创建一个jQuery对象:
$(element).data("ddd");
另请注意,jQuery
.data()
方法在后台尝试$.parseJSON
,因此无需解析数据,即它返回相应的JavaScript结构:function dataAttr( elem, key, data ) {
var name;
// If nothing was found internally, try to fetch any
// data from the HTML5 data-* attribute
if ( data === undefined && elem.nodeType === 1 ) {
name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
data = elem.getAttribute( name );
if ( typeof data === "string" ) {
try {
data = data === "true" ? true :
data === "false" ? false :
data === "null" ? null :
// Only convert to a number if it doesn't change the string
+data + "" === data ? +data :
rbrace.test( data ) ? jQuery.parseJSON( data ) :
data;
} catch ( e ) {}
// Make sure we set the data so it isn't changed later
dataUser.set( elem, key, data );
} else {
data = undefined;
}
}
return data;
}
如果使用
.attr()
而不是.data()
方法,则要解析JSON,必须使用$.parseJSON
或JSON.parse
方法。关于javascript - 尝试从属性值获取HTML数据时为什么会出错?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30175519/