好的,使用.attr来创建自定义属性?

时间:2013-08-14 16:09:57

标签: jquery

我想为元素分配自定义值。似乎.attr(customName,value)可以正常工作。如果该属性不存在(它不会)jQuery创建它并放置我提供的值。稍后我可以使用.attr(customName)读取值,就像它是一个普通的HTML已知属性一样。我知道有一种HTML5 .data()方法用于此类事情,但它并不持久。如果我将html移动到磁盘然后检索它,那么使用data()设置的任何内容都将消失,而.attr()会直接进入HTML。

我没有在.attr()文档中看到它保证创建一个新的attr名称,如果它不能识别你给它的东西,所以我有点紧张。以这种方式使用.attr()是否安全?感谢。

3 个答案:

答案 0 :(得分:1)

您应该使用数据来创建自定义属性。它使用.data()跨浏览器工作,你可以将它保留在你的标记中,这样它就不会被重置。 Nettuts Data Attr Article

E.g。

<a href="#" data-custom-description="lorum ipsum">tool tip</a>

$('a').data('custom-description'); - &gt;返回lorum ipsum

答案 1 :(得分:1)

您不应该使用attr()创建一个不在HTML规范中的属性,因为它会使您的页面无效,并导致其他问题。

我假设.data()不忠实的意思是值不会出现在渲染源中,因为它们保存在jQuery所持有的缓存对象中。

您可以使用attr()设置数据属性:

$('#foo').attr('data-bar', 'wibble');

答案 2 :(得分:1)

是的,你可以这样做。但是,它不是有效的HTML。你要做的是创建一个新的XHTML分支。您可以创建自己的DTD进行验证,但这可能不是必需的。

请记住,您可能会遇到某些浏览器(尤其是旧版本的IE)的问题。但是,大多数浏览器只会忽略未知属性,因此您可以随意使用它们。您是否关心HTML无效是您的电话,但出于实际目的,只要您避开某些保留的属性名称(例如idclass),它就可以正常工作。

然而,您可能想退后一步并重新评估您要完成的工作,因为可能有更好的方法在文档中存储持久数据。