【问题标题】:Duplicate ID - Jquery重复的 ID - Jquery
【发布时间】:2015-12-17 02:34:54
【问题描述】:

我的 html 页面中有重复 ID 的问题。

有时我需要从 Jquery 中的一个类中获取 id 值,所以:

<span class='click' id='23'>Click</span>

在另一个班级我有相同的 id:

<span class='classtow' id='23'>Click class two</span>

它适用于 Jquery,因为它是一个不同的函数来获取类 ID:

$(".click").click(function(){
var element = $(this);
var I = element.attr("id");
});
$(".classtwo").click(function(){
var element = $(this);
var I = element.attr("id");
});

但它不会通过 HTML 验证。解决此问题的最佳做法是什么?

我知道 id 必须是唯一的,我想知道我该如何解决这种情况(知道我需要对两者都使用 23 值 - 这是我需要点击的用户 ID)

【问题讨论】:

  • 最佳实践是使用像 data-id="25" 这样的属性。 id 属性必须是唯一的
  • ID 是如何生成的,它们最终会重复?
  • 对于不同的功能我需要使用相同的用户ID
  • 我不能使用25,因为它是另一个用户ID
  • 25 就是一个例子。使用 23... 8-|

标签: jquery


【解决方案1】:

ids 应该始终是唯一的。所以这是最好的解决方案。 对于 HTML 验证问题,我们需要验证码...

【讨论】:

    【解决方案2】:

    id 必须是唯一的...否则它将不是有效的 HTML...这是一个 HTML 规范!

    您可以使用其他数据属性,例如 data-your-custom-id="25"

    【讨论】:

      【解决方案3】:

      写在MDN:

      id 全局属性定义了一个唯一标识符(ID),它在整个文档中必须是唯一的。其目的是在链接(使用片段标识符)、脚本或样式(使用 CSS)时识别元素。

      id 必须是唯一的。你不应该使用它两次

      这不是你问的,但请注意这个通知:

      注意:使用除 ASCII 字母和数字以外的字符,“_”、“-”和“.”可能会导致兼容性问题,因为它们在 HTML 4 中是不允许的。尽管在 HTML 5 中取消了此限制,但为了兼容性,ID 应以字母开头。

      【讨论】:

      【解决方案4】:

      很多人都建议过,但我会尽量让它更清楚。在 HTML5 中我们可以使用所谓的data-attributesYou can also use these in older versions of HTML, though it won't pass a validator.(但它仍然比使用重复 ID 更好!)基本上,您可以通过指定 data-something=something 将自己的键值对添加到任何 html 元素。

      例子:

      <span class='click' data-userid='23'>Click</span>
      <span class='classtwo' data-userid='23'>Click class two</span>
      

      然后您可以像这样使用 jQuery 获取该值:

      $("span").click(function () {
          var element = $(this),
              userid = element.data("userid");
          alert(userid);
      });
      

      See it here.

      【讨论】:

      • 我建议element.attr("data-userid"); 因为.data() 方法比attr() 复杂得多
      • @ᴀʀᴛᴜʀғɪʟɪᴘɪᴀᴋ 为什么?这是perfectly valid返回 jQuery 集合中第一个元素的命名数据存储中的值,由 data(name, value) 或 HTML5 数据设置- i> 属性。*
      • 看看data() 方法在jQuery 中是如何工作的。不要仅仅使用它来访问属性值。 stackoverflow.com/questions/7261619/jquery-data-vs-attr
      • @ᴀʀᴛᴜʀғɪʟɪᴘɪᴀᴋ 这个问题的top rated answer 正是我所做的。如果您想从 HTML 中的数据属性中获取值,.data() 非常适合使用。 但是设置 HTML 中的数据属性时,由于可访问性,您应该小心使用哪个函数。
      • @ᴀʀᴛᴜʀғɪʟɪᴘɪᴀᴋ 我们在这里处理的是点击处理程序......不是通过 dom 的递归循环。该性能测试在 FF 40 中对我来说仅显示了 3% 的差异。上面链接的问题现在已经存在多年了,在 html5 和数据集属性之前。这个complex 论点不适合许多现代框架(即引导程序)使用data 大量构建的方式
      猜你喜欢
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 2015-09-07
      • 2012-07-20
      • 2010-10-03
      • 1970-01-01
      • 2014-07-03
      • 2023-04-05
      相关资源
      最近更新 更多