【问题标题】:Manipulating HTML nodes with java javascript scripting API使用 java javascript 脚本 API 操作 HTML 节点
【发布时间】:2014-10-20 12:23:25
【问题描述】:
我正在使用运行良好的Java Scripting API。现在我有一个函数,我想从字符串中获取所有<a> 标记,然后在返回操纵的字符串之前添加/删除属性。问题当然是,我不能只使用document.getElementsByTagName。有没有不经过正则表达式地狱的简单选择?
请注意,我目前在 Java 7(使用 Rhino)上运行,计划更新到 Java 8(使用 Nashorn),所以我不想使用任何 Rhino 特定的 API。
【问题讨论】:
标签:
java
javascript
rhino
nashorn
java-scripting-engine
【解决方案1】:
在 Addi Osmani 的“学习 JavaScript 设计模式”一书中,作者提到了类似问题的 3 个替代方案,显然 getElementById() 是最快的。
摘自本书:
想象一下,我们有一个脚本,用于在页面上找到每个 DOM 元素
对于“foo”类,我们希望增加一个计数器。什么最
查询此元素集合的有效方法?嗯,那里
有几种不同的方法可以解决这个问题:
- 选择页面中的所有元素,然后存储对它们的引用。接下来,过滤这个集合并使用正则表达式(或
另一种方法)只存储具有“foo”类的那些。
- 使用现代本机浏览器功能(例如
querySelectorForAll())选择所有具有“foo”类的元素。
- 使用诸如
getElementsByClassName() 之类的网络功能来类似地...
另一种方法是,由于您使用的是 Nashorn/Rhino,您可以使用 Xerces 库的 Java 实现来操作 DOM。
希望这可以帮助您找到解决方案。