javascript - 唯一的元素 ID,即使元素没有

标签 javascript firefox dom greasemonkey

我正在编写一个 GreaseMonkey 脚本,我在其中迭代了一堆元素。对于每个元素,我都需要一个字符串 ID,以后可以使用它来引用该元素。该元素本身没有 id 属性,我无法修改原始文档来为它提供一个属性(尽管我可以在我的脚本中更改 DOM)。我无法将引用存储在我的脚本中,因为当我需要它们时,GreaseMonkey 脚本本身将超出范围。例如,是否有某种方法可以获取浏览器使用的“内部”ID?仅适用于 Firefox 的解决方案很好;一个可以应用于其他场景的跨浏览器解决方案会很棒。

编辑:

  • 如果 GreaseMonkey 脚本超出范围,您稍后如何引用元素? GreaseMonkey 脚本正在向 DOM 对象添加事件。我无法将引用存储在数组或其他类似机制中,因为当事件触发时,数组将消失,因为 GreaseMonkey 脚本将超出范围。因此,事件需要某种方式来了解附加事件时脚本所具有的元素引用。并且所讨论的元素不是它所附加的元素。

  • 不能只在元素上使用自定义属性吗? 是的,但问题出在查找上。我不得不求助于遍历所有元素,寻找将自定义属性设置为所需 ID 的元素。这当然可行,但在大型文档中,这可能非常耗时。我正在寻找浏览器可以执行查找繁琐工作的东西。

  • 等等,你能不能修改文档?我不能修改源文档,但我可以在脚本中更改 DOM。我会在问题中澄清。

  • 你能不使用闭包吗? 闭包确实有效,尽管我最初认为它们不会。看我后面的帖子。

这听起来像是对这个问题的回答:“是否有一些我可以使用的内部浏览器 ID?”是“否”。

最佳答案

答案是否定的,没有您可以访问的内部 ID。 Opera 和 IE(也许是 Safari?)支持 .sourceIndex (如果 DOM 改变了)但是 Firefox 没有这种东西。

您可以通过生成给定节点的 Xpath 或从 document.getElementsByTagName('*') 中查找节点的索引来模拟源索引。这将始终按源顺序返回元素。

当然,所有这些都需要一个完全静态的文件。对 DOM 的更改将破坏查找。

我不明白的是您如何可以松散对节点的引用而不是对(理论上的)内部 ID 的引用?关闭和分配要么有效,要么无效。还是我遗漏了什么?

关于javascript - 唯一的元素 ID,即使元素没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/226689/

相关文章:

javascript - 如何正确调用 JavaScript 函数?

javascript - 将数组从 MVC Controller 传递到 Javascript

CSS 规则阴影并不总是有效

javascript - Firefox 中的 event.srcElement

javascript - 使用 Javascript 在表中设置复选框

javascript - 将 angular-route 1.5.0 更新为 1.5.1 时出现 Karma 错误

html - 为什么元刷新在 Firefox 中不起作用?

javascript - 检测由 CSS 转换引起的 HTML 元素的移动

java - 如何将带有ID属性的doctype添加到java中的XML文件中?

javascript - 确定 DataTables 是否在 1.10 版本中完成。有回调吗?