2009-08-20 99 views
41

可能重复:
Custom attributes - Yay or nay?
Non-Standard Attributes on HTML Tags. Good Thing? Bad Thing? Your Thoughts?将自己的属性添加到HTML元素可以吗?

在当前的学习项目我的工作,我需要补充,其价值将是一个数字的属性。起初,我想到使用“ID”为此目的,但an answer透露,这是不好的做到这一点。

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

这就是为什么我想这样做,以便您可以纠正我,如果我做它完全错误: 我需要在我的JavaScript(使用jQuery)访问此号码。只需考虑属性的值很简单,但是从“m12”或“m6”这样的字符串中提取数值是一种痛苦。 (我是JavaScript世界的初学者。)

回答

90

已经有很多讨论这个问题:

在一天结束的时候,我是在一个相信数据属性营地最好的方式去。他们正在HTML5中引入,以避免名称冲突。从本质上讲,如果要存储任何数据相关的你只是在前面加上属性名称“数据 - ”:

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

唯一CON整个事情就是那么你的XHTML将无法验证,但老实说,我不要不关心那些东西。 (没错,我说了)

+9

+1。我完全同意这种方法是一个工作解决方案,易于实现,不会破坏任何东西。理想主义的实用主义也在我的书中获胜。 – AnthonyWJones 2009-08-20 12:19:37

+1

我会这样做,因为它今天起作用,并且因为它在HTML5规范中,它可能会在10年后运行。它还保持数据独立于其他值(例如将其保留在'id'属性中,以后可能会因其他原因而更改),同时仍将其保留在元素上。是的,HTML验证错误应该被看作是对问题的建议/指针,而不是必须修复错误(并且在那个线索上,我会说JSLint只是为了激起一些东西=) – Blixt 2009-08-20 12:21:01

+6

“没错,我说过“ - 第一步是承认它。 ;) – nickf 2009-08-20 12:33:36

-8

否 - it's not

+0

仇敌 - 我刚才说什么了?如果网站没有通过W3验证,这很好吗? – 2009-08-20 12:15:06

+1

我投了这个*只是因为*我觉得这是一个真正的答案;尽管我猜测这个反对票是由于缺乏解释。不,我不认为只提供一个链接就足够了。我相信你应该至少总结一下你所链接的页面,即使你不选择自己解释*。 – 2009-08-20 12:17:01

+1

@Arnis:可能会,可能不会,但是如何在您的“答案”中包含少量文本会有多难? – AnthonyWJones 2009-08-20 12:21:26

8

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

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

2

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

无论如何,你可以在这里读到类似的讨论: Custom attributes - Yea or nay?

1

这不是一个明确的答案,但已做到这一点,在过去,我可以说这不仅效果很好,它是跨浏览器友善。

5

只要你知道,你可以很容易地提取像M12和M6的字符串的ID,我会做这样的:

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

或者如果说,你有号码一堆链接该ID如上所述,且所有环节有clickMe类:

$('a.clickMe').click(function() { 
    alert($(this).attr('id').split('_')[1]); 
}); 
+0

这就是我通常做的事情,如果我只是有一个我想检索的ID,但有时候不止这些。 – 2009-08-20 12:14:49

+0

我希望我可以upvote只有一次:) – codelame 2016-03-02 19:48:54

1

如果使用jQuery,您可以使用。数据存储对一个元素的自定义信息。

自定义属性的缺点是:

  • IE6创建额外的对象来存储自定义“EXPANDO”的属性,这些有,如果他们是通过脚本创建的倾向,尤其是泄漏。

  • 验证问题

+0

我使用ASP。NET MVC和我试图添加自定义属性“data-messid”使用HTML帮助器方法的htmlAttribs参数:新{@class =“mcf”,data-dd = Html.AttributeEncode(m.ID)}。但它不起作用(语法问题)。我看到你在ASP.NET MVC标签中很活跃,所以请你帮助我如何做到这一点? – Hemant 2009-08-20 12:36:01

+0

当然 - 用asp.net mvc标签询问另一个Q – redsquare 2009-08-20 12:41:28

+0

,尽管你看起来正确 – redsquare 2009-08-20 12:42:46

相关问题