【问题标题】:Is it OK to add your own attributes to HTML elements? [duplicate]可以将自己的属性添加到 HTML 元素吗? [复制]
【发布时间】:2009-08-20 12:09:44
【问题描述】:

可能的重复:
Custom attributes - Yay or nay?
Non-Standard Attributes on HTML Tags. Good Thing? Bad Thing? Your Thoughts?

在我正在进行的当前学习项目中,我需要添加一个属性,其值将是一个数字。起初我想用“id”来达到这个目的,但an answer 透露这样做不好。

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

这就是我想这样做的原因,以便如果我做错了,您可以纠正我: 我需要在我的 JavaScript 中访问这个数字(使用 jQuery)。只取属性的值很容易,但是从像“m12”或“m6”这样的字符串中提取数值是很痛苦的。 (我是 JavaScript 世界的初学者。)

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    对此有很多讨论:

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

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

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

    【讨论】:

    • +1。我完全同意这种方法是一种可行的解决方案,它易于实施并且不会破坏任何东西。在我的书中,实用主义胜过理想主义。
    • 我会选择这个,因为它现在可以工作,而且因为它在 HTML5 规范中,它可能会在 10 年后工作。它还保持数据独立于其他值(例如将其保存在 id 属性中,稍后可能由于其他原因必须更改),同时仍将其保留在元素上。是的,HTML 验证错误应该被视为问题的建议/指针,而不是必须修复的错误(在这条路上,我会对 JSLint 说同样的话,只是为了激起一些事情 =)
    • “没错,我说过了”——第一步是承认。 ;)
    【解决方案2】:

    在 HTML 5 中,您可以添加任何以 data- 开头的属性,例如&lt;div data-messid="12"&gt; 可以。

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

    【讨论】:

      【解决方案3】:

      如您所知,您可以轻松地从 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]);
      });
      

      【讨论】:

      • 如果我只是想检索一个 ID,我通常会这样做,但有时不止于此。
      • 我希望我只能投票一次 :)
      【解决方案4】:

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

      无论如何,您可以在此处阅读类似的讨论: Custom attributes - Yea or nay?

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          如果使用 jQuery,您可以使用 .data 来存储针对元素的自定义信息。

          自定义属性的缺点是:

          • IE6 创建额外的对象来存储自定义的“expando”属性,这些属性很容易泄漏,尤其是通过脚本创建时。

          • 验证问题

          【讨论】:

          • 我正在使用 ASP.NET MVC,我正在尝试使用 html 辅助方法的 htmlAttribs 参数添加自定义属性“data-messid”:new { @class= "mcf", data-dd = Html .AttributeEncode (m.ID)}。但它不起作用(语法问题)。我看到你在 ASP.NET MVC 标签中是活跃的,所以请你帮我怎么做?
          • 当然 - 用 asp.net mvc 标签问另一个 Q
          • 虽然你看到的是正确的
          • 我认为这将是一个太琐碎的问题。无论如何,要为此打开另一个问题......
          【解决方案7】:

          否 - it's not

          【讨论】:

          • 仇恨者——我说错了什么?如果网站没有通过 W3 验证可以吗?
          • 我对此投了赞成票只是因为我觉得这是一个真实的答案;尽管我会冒险猜测否决票是由于缺乏解释。不,我不认为仅仅提供一个链接就足够了。我相信您至少应该总结您链接到的页面,即使您不选择自己解释
          • @Arnis:可能是,也可能不是,但是在你的“答案”中包含这么少的文字对你来说有多难?
          • @ricebowl,我是一名程序员 - Hermant 没有明确要求参数
          • 虽然这个答案理论上可以回答问题,it is better to include the essential parts of the answer here,并提供链接供参考。请将相关内容直接添加到您的答案中,因为它会防止进一步的链接失效。
          猜你喜欢
          • 1970-01-01
          • 2019-07-25
          • 1970-01-01
          • 2019-02-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-23
          相关资源
          最近更新 更多