我应该在多大程度上强制执行DOM元素的ID的唯一性?

Sea*_*son 0 html javascript jquery dom asp.net-mvc-3

我遇到了一个有两个可能解决方案的问题.我不确定哪种解决方案"更正确".

我有一个在页面上方打开的模态对话框.该对话框托管ID为"foo"的元素.

现在,这根本不是一个问题.但是,非对话框页面有多个选项卡.其中一个标签,在某些内容的深处,也有一个ID"foo".这会导致奇怪的,间歇性的问题,这取决于在遍历DOM树时首先遇到"foo".

不幸的是,两个值都以完全相同的方式呈现完全相同的信息.唯一的区别是一个是在对话框中托管.正在使用相同的模型 - 因此我的ViewModel生成了相同的ID.

我可以做两件事之一:

  • 显式覆盖其中一个ID创建方法,以确保在对话框中生成的ID与非对话框的ID相比是唯一的.
  • 修改我的jQuery搜索选择器只能向内读取对话框的表单 - 确保对话框不会捕获意外的DOM元素.

似乎第二个想法是更好的做法.我遍历较少的DOM节点,并且不必破解任何内容.然而,对于一个不知情的开发人员,人们仍然可能通过不从适当的区域开始搜索而意外地重新引入此问题.

但是,对于从事我们应用程序的开发人员来说,可以说同样的问题.他们需要明确知道覆盖ViewModel的ID创建,以便它不会创建相同的ID.

如果它们以不同的形式封装,那么重复ID是否可以接受?身份证的独特性在哪里停止有意义?

该ID是通过MVC的EditorFor HTML Helper生成的.我可以通过生成特定于表单的ID来覆盖它,但这显然不是MVC的意图.

<%= Html.EditorFor(model => model.CustomerDisplayName) %>
Run Code Online (Sandbox Code Playgroud)

更新:似乎我应该强制执行ID唯一性.但是,ASP.NET MVC3似乎并没有提供一种简单的方法来确保ID是DOM独有的.我可以附加表单的ID,但这会产生巨大的ID ..不确定这是否是最好的调用.有什么想法吗?

wak*_*oka 7

如果它们以不同的形式封装,那么重复ID是否可以接受?

它永远不可接受,ID应该是唯一的.否则您的文档无效.

身份证的独特性在哪里停止有意义?

身份证的独特期望永远不会有意义.每个元素都有一个唯一ID,这是规范的一部分.