Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以浏览器无关的方式识别HTML元素(javascript)_Javascript_Dom - Fatal编程技术网

如何以浏览器无关的方式识别HTML元素(javascript)

如何以浏览器无关的方式识别HTML元素(javascript),javascript,dom,Javascript,Dom,我需要以浏览器无关的方式识别页面上的所有html元素。我所做的基本上是使用鼠标事件来记录页面上的点击。我需要记录单击了哪个元素。因此,我向document.body元素添加了一个鼠标按下侦听器。在鼠标按下时,我得到鼠标下的元素。假设它是一个div。然后我使用文档中该div的索引。getElementsByTagName('*')nodelist和nodeName('div')来标识该div。示例元素id将是div45,这意味着它是一个div,并且是'*'nodelist中的第45个元素 这一切都

我需要以浏览器无关的方式识别页面上的所有html元素。我所做的基本上是使用鼠标事件来记录页面上的点击。我需要记录单击了哪个元素。因此,我向document.body元素添加了一个鼠标按下侦听器。在鼠标按下时,我得到鼠标下的元素。假设它是一个div。然后我使用
文档中该div的索引。getElementsByTagName('*')
nodelist和nodeName('div')来标识该div。示例元素id将是div45,这意味着它是一个div,并且是'*'nodelist中的第45个元素

这一切都很好,直到我使用IE,它给了我不同的索引。所以FireFox中的div45可能就是IE中的div47

有人有什么想法吗?我只需要页面上所有元素的id在任何浏览器中都相同,也许索引不够好,但我真的没有更多的想法

谢谢


Guido

IE错误地返回注释节点作为
getElementsByTagName('*')
的一部分。过滤掉这些元素(例如,只收集元素节点-
node.nodeType==1
),您应该会得到一致的结果。

类似于
jQuery
的Javascript库被设计为不依赖于浏览器。请使用它们


搜索整个DOM树对我来说似乎不是一个好方法。

您可能对@bgy感兴趣:xpath如何帮助我识别节点?nodelis仍然是同一个nodelist。我非常确定IE甚至不支持xpathUnfortunatelly,我不能在我的脚本中使用库(复杂的原因)。然而,我可以删除麻省理工学院许可项目(如jQuery)的识别代码。然而,我不认为jqueryids元素能做到这一点吗?我知道它在输入标记中添加了愚蠢的jqueryxxx属性,但这并不是我真正需要的。@gatapia,您想要一个用于标识元素的命名约定吗?还是对实际元素的引用?@gatapia:那是什么,你最后打算怎么做?一定有更好/更简单的方法来做。很棒的东西,它通过了我在所有浏览器中的所有测试!很高兴能有一个聪明的解释。