可以将自己的属性添加到 HTML 元素吗?

IT技术 javascript jquery html
2021-03-15 15:40:07

可能的重复项:
自定义属性 - 是还是不是?
HTML 标签上的非标准属性。好东西?坏事?你的意见?

在我正在进行的当前学习项目中,我需要添加一个值为数字的属性。起初我想为此使用“id”,但一个答案表明这样做不好。

如果我创建自己的属性,说“messid”并为其分配一个数值,例如“12”,“6”等,是否可以?

这就是为什么我要这样做,以便在我完全错误的情况下可以纠正我:我需要在我的 JavaScript 中访问这个数字(使用 jQuery)。仅获取属性值很容易,但从“m12”或“m6”之类的字符串中提取数值却很痛苦。(我是 JavaScript 世界的初学者。)

6个回答

关于这一点已经有很多讨论:

归根结底,我认为数据属性是最好的方法。它们是在 HTML5 中引入的,以避免名称冲突。本质上,如果你想存储任何相关的数据,你只需在属性名称前加上“data-”:

<div class="user" data-userid="5"></div>

整个事情的唯一缺点是您的 XHTML 不会验证,但老实说,我并不关心那些东西。(没错,我说的)

“没错,我说过了”——第一步是承认这一点。;)
2021-04-24 15:40:07
+1。我完全同意这种方法是一种易于实施且不会破坏任何内容的可行解决方案。在我的书中,实用主义胜过理想主义。
2021-04-30 15:40:07
我会同意这个,因为它今天可以工作,而且因为它在 HTML5 规范中,它可能会在 10 年后工作。它还使数据独立于其他值(例如将其保留在id属性中,稍后可能因其他原因而不得不更改),同时仍将其保留在元素上。是的,HTML 验证错误应该被视为问题的建议/指针,而不是必须修复的错误(在这条路上,我对 JSLint 说同样的话只是为了稍微搅动一下=)
2021-05-12 15:40:07

在 HTML 5 中,您可以添加任何以 开头的属性data-,因此 eg<div data-messid="12">是可以的。

如果您添加自己的属性,HTML 4 和 XHTML 1 将不会进行验证,但除此之外,如果您选择的属性名称足够独特(因此它不会与任何当前或未来的 HTML 属性冲突),则不会发生任何坏事。

正如您所知,您可以轻松地从 m12 或 m6 之类的字符串中提取 ID,我会这样做:

//name the IDs m_12, m_3 etc
var number = $('#someElement').attr('id').split('_')[1];

或者,如果说,您有一堆带有数字的链接,如上所述,并且所有链接都具有以下clickMe类:

$('a.clickMe').click(function() {
    alert($(this).attr('id').split('_')[1]);
});
我希望我只能投票一次:)
2021-05-01 15:40:07
如果我只是有一个想要检索的 ID,我通常会这样做,但有时还有更多。
2021-05-10 15:40:07

我使用自定义属性,并且由于我检查过的所有浏览器都支持它们,因此我认为使用它们还不错。您还可以使用自定义 HTML 标签来模拟 HTML5,以及一些 IE hack,那么为什么不使用属性,如果它们不需要任何 hack 呢?

无论如何,您可以在这里阅读类似的讨论: 自定义属性 - 是还是不是?

这不是一个明确的答案,但过去不得不这样做,我可以说这不仅效果很好,而且跨浏览器友好。