2

我想做这样的事情:

var elem = document.createElement("input");
elem.setAttribute("my-attribute", myObject);
document.getElementById("parent").appendChild(elem);

稍后我将需要在myObject对这个(和类似的)元素执行一些操作时获取。

注意:我需要它作为属性(而不是,例如,作为元素对象的成员,如 中elem.myAttribute = myObject),因为对于某些元素,值是硬编码到页面 HTML 中的字符串。我需要的是能够以编程方式为其他元素设置此属性,并使用不总是纯字符串的值。

我试过这个,它在我的浏览器(Firefox 14)中工作,但我需要知道这是否适用于跨浏览器,如果我决定使用 jQuery,我是否能够使用 jQuery 获取这些属性的值稍后我的页面。

4

2 回答 2

5

否 - 根据定义,属性存储字符串值。显而易见的方法是将对象存储为属性,但您说这不合适。

任何一个:

1) 使用 jQuery 的数据 API(因为它不会真正记录元素上的数据,所以你可以存储任何你想要的东西,而不仅仅是字符串)

2) 字符串化对象并将其作为 HTML5 数据属性附加到元素。

var elem = document.querySelector('p'),
    obj = {foo: 'bar'};
elem.setAttribute('data-myObj', JSON.stringify(obj));
/* ...then, later... */
var data = JSON.parse(elem.getAttribute('data-myObj'));

但请注意,因为我们正在处理 JSON,您将无法将方法存储为该对象的一部分。他们将被 剥离JSON.stringify()

最后,使用属性意味着你会弄乱你的 HTML,因为它们会出现在任何 HTML 转储中(与属性不同),但这纯粹是一个装饰性的弱点。

于 2012-08-07T15:28:47.647 回答
1

您可以使用 jquery 中的数据属性来执行此操作(http://api.jquery.com/data/)

您可以使用 html 5 数据属性: http ://ejohn.org/blog/html-5-data-attributes/

这些可以使用 jquery 数据 api 来检索。

然而,这些必须被串起来

“从 jQuery 1.4.3 开始,HTML 5 数据属性将自动拉入 jQuery 的数据对象”

于 2012-08-07T15:28:28.330 回答