是否可以将 id 添加到已经有 id 的元素

Posted

技术标签:

【中文标题】是否可以将 id 添加到已经有 id 的元素【英文标题】:Is it possible add an id to an element which already has an id 【发布时间】:2015-08-04 14:11:02 【问题描述】:

我正在向这样的元素添加一个类:.addClass('middle_item')

然后我注意到该类是唯一的,所以我应该将其更改为 id .attr("id", 'middle_item');,对吗?

那么,我可以向已经有 id 的元素添加另一个 id 吗?

如果答案是肯定的,有什么方法可以获取第一个 id 并将其保存在变量中?

Example Fiddle here

【问题讨论】:

没有特别的理由将类更改为 id,因为它是该类的唯一元素。一个元素只能有一个 id,但它可以有多个类。 @Pointy 我只想将类更改为 id,因为我知道如果只有一个元素可以具有该类,那么该类应该是一个 id 你应该忘记这个概念,因为它真的没有意义。 @Pointy - 你应该在这里指出他的答案:***.com/questions/14005978/… :) @talemyn 哇那天我着火了 :) 【参考方案1】:

不,这是不允许的。 . .虽然 html 4 和 HTML 5 在“合法 ID 值”方面存在差异,但它们的共同点之一是值中不允许有空格:

HTML 4 定义 - http://www.w3.org/TR/html4/types.html#type-id

ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 (" _")、冒号 (":") 和句点 (".")。

HTML 5 定义 - http://www.w3.org/TR/html5/dom.html#the-id-attribute

该值在元素的主子树中的所有 ID 中必须是唯一的,并且必须包含至少一个字符。该值不得包含任何空格字符。

因此,没有空格,您只能拥有一个 ID 值。

【讨论】:

【参考方案2】:

就像@Pointy 所说,一个元素只能有 1 个 ID。似乎您正在尝试将 ID 或类应用于 <li> 以便稍后获取它?如果是这样,有更好的方法可以使用 jQuery 使用 :nth-child() 选择器获取列表中的中间项,就像在 this 帖子中一样。选择器文档here。

【讨论】:

【参考方案3】:

每个元素只能有一个id,请参阅this answer for more details,因此您必须删除以前的 id,但这很奇怪。

所有这些都考虑到了,这就是你如何实现这一点,但我不认为这实际上是你想要的

$("#listitem1").removeAttr("id").attr("id", "newID")

在上面的代码中,我通过首先选择 #listitem1 然后删除它的 id 属性,最后应用一个新的 id 来链接方法。

同样在您的示例中,var i = $("middle_item").attr("id"); 返回 undefined,因为 id 从未应用,但如果您这样做了,您会犯两个错误:首先您写了 $("middle_item"),而它应该是 $("#middle_item"),其次是因为您没有先删除以前的id

jQuery Docs

从 jQuery 1.6 开始,.attr() 方法为尚未设置的属性返回 undefined。要检索和更改 DOM 属性,例如表单元素的选中、选择或禁用状态,请使用 .prop() 方法。

【讨论】:

以上是关于是否可以将 id 添加到已经有 id 的元素的主要内容,如果未能解决你的问题,请参考以下文章

将元素添加到状态 React

如何将类名添加到以特定 id 开头的所有元素?

如何将 ID 属性添加到 asp.net MVC 链接元素

如何用js给元素添加ID

PHP:通过 ID 将 html 内容附加(添加)到现有元素

React Reducer - 将元素添加到现有元素