1

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

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

4

3 回答 3

1

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

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

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

于 2013-08-14T16:16:49.350 回答
1

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

例如

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

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

于 2013-08-14T16:13:23.620 回答
1

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

我假设您所说的.data()不持久是指这些值不会出现在呈现的源中,因为它们保存在 jQuery 保存的缓存对象中。

相反,您可以使用以下方法设置数据属性attr()

$('#foo').attr('data-bar', 'wibble');
于 2013-08-14T16:14:26.457 回答