将提醒DOM位置的代码
Code that will alert DOM Position
可能重复:
JQuery检查DOM 中的重复ID
假设我有一个代码:
<div id="one">
<div id="two"></div>
<div id="three"></div>
</div>
<div id="four">
<div id="two"></div>
</div>
<div id="one">
<p id="five">
<span id="three"></span>
</p>
</div>
(具有不同DOM项的大型HTML代码)。
目标:
是否可以构建一个jQuery或JavaScript代码,提醒我在该职位的文档中id
的重复。此处位置的含义如下;
> duplicate id: 'div#two' > within `div#four`, `div#one`
> duplicate id: 'div#one' > parent of `p#five`
> duplicate id: 'span#three' > within `p#five` and such a pattern.
注:
我发现了一个和我相似的问题,但不完全一样。因为这与之前提出的任何问题都不重复。所以不要关闭它。
如果你只想根除重复的id,你应该验证你的html。
http://validator.w3.org/
这将提醒您重复id,并确保您的代码格式正确。
注意:阅读所有注意事项。这段代码的目的是说明问题的本质,即纯JS解决方案是不可取的。
首先,希望这能说明,有时可行的事情并不总是可取的。有很多很棒的工具可以提供更好的错误检查,比如W3C的验证器或使用它的插件/扩展,比如Chrome的有效性。一定要用那些。
但无论如何,这里有一个极简主义的例子。请注意,没有一个DOM引用它自己的行号,因此您必须将documentElement
中的整个innerHTML
属性作为字符串获取。匹配该字符串的部分,然后在匹配位置将其分解为子字符串,然后计算回车次数。显然,这段代码可以进行广泛的重构,但我认为重点是明确的(对于那些想要它的人来说也是jsFiddle示例,尽管行数将是fubar):
编辑
我已经更新了正则表达式,使其与<div>id="a"</div>
等示例不匹配。尽管如此,如果OP想要纯JS,他将不得不依赖于此版本或一个相当复杂的版本,该版本具有非常小的好处。底线是DOM节点和行号之间没有关联。你必须自己弄清楚ID属性在哪里,然后追踪它们的位置。这极易出错。作为编程实践,它可能有一定的意义,但在现实世界中是非常不可取的。最好的解决方案——我在这里第四次重申——是一个扩展或插件,它只会将您的页面发送到W3C这样的真正验证器。
下面的代码被设计成"只工作",因为没有好的方法来完成OP的要求。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Test</title>
</head>
<body>
<div id="a"></div>
<div id="a"></div> <!-- catches this -->
<div id="b"></div>
<div>id="a"</div>
<div id="c"></div>
<div id="c"></div> <!-- catches this -->
<span>[id="a"]</span>
<script>
var re = /<[^>]+id="(.*?)"[^>]*>/g; // match id="..."
var nl = /'n'r?/g; // match newlines
var text = document.documentElement.innerHTML;
var match;
var ids = {}; // for holding IDs
var index = 0;
while (match = re.exec(text)) {
// Get current position in innerHTML
index = text.indexOf(match[0], index + 1);
// Check for a match in the IDs array
if (match[1] in ids) {
// Log line number based on how many newlines are matched
// up to current position, assuming an offset of 3 -- one
// for the doctype, one for <html>, and one for the current
// line
console.log("duplicate match at line " +
(text.substring(0, index).match(nl).length + 3));
} else {
// Add to ID array if no match
ids[match[1]] = null;
}
}
</script>
</body>
</html>
- jQuery toogle-一个打开,另一个隐藏-在代码中的任何位置
- 当代码使用背景色时无法更改位置
- 我可以替换“;获取“;方法用“;POST”;代码库中的任何位置
- 我如何找到“;操作's”;代码中的位置'回调函数不支持此操作'
- 为什么首先单击文档空白处的任何位置启动代码,而不是单击超链接,以及为什么打开了太多选项卡
- 1行代码(console.log),代码中的两个位置=两个结果差异
- 我应该使用jQuery将页面相关的javascript代码放在Rails3.2中的什么位置
- 地理位置代码不适用于iPhone / iPod touch / iPad
- 在博客中放置jquery代码的位置
- Javascript - 在多个位置插入代码段
- 将推送通知插件的代码放在js文件中的确切位置
- 脚本标记的位置会影响代码执行
- 我的简单代码中的奇怪文本位置
- 使用 JS 代码设置鼠标位置,并将位置放在其他 JS 代码中
- “样式”代码在 MVC 模式中的位置
- 将Google Analytics跟踪代码放在的较高位置是否会提高准确性
- 取消链接代码以从服务器中删除文件的位置
- 如何根据子字符串位置在代码镜像中突出显示子字符串
- 在下面的 php 脚本中放置 php 代码的位置
- Wordpress, Jquery,切换,按钮,文件位置,代码位置,只在某些时候有效.为什么