2014-10-20 44 views
0

我使用的是Java Scripting API,它工作得很好。现在我有一个函数,我想要从String中获取所有<a>标记,然后在返回操纵的String之前添加/删除属性。问题当然是,我不能只使用document.getElementsByTagName。是否有任何简单的选项,而不经过正则表达式?使用java javascript scripting API操作HTML节点

请注意,我目前正在运行Java 7(与犀牛),计划更新到Java 8(与Nashorn),所以我不想使用任何Rhino特定的API。

回答

1

在Addi Osmani的书“学习JavaScript设计模式”一书中,作者提到了3种类似问题的替代方案,显然是getElementById()最快的方法。从本书

摘录:

假设我们有一个脚本,每个DOM元素与类 页上的“富”,我们要递增计数器。什么是最有效的方式来查询这个元素的集合?嗯,有 几个不同的方法解决此问题可以解决:

  • 所有页面中的元素,然后引用存储选择他们。接下来,过滤这个集合并使用正则表达式(或另一种方式)来存储那些只有类“foo”的集合。
  • 使用现代原生浏览器功能(如querySelectorForAll())来选择类为“foo”的所有元素。
  • 使用netive功能如getElementsByClassName()以同样...

另一种方法是,因为你正在使用犀牛/犀牛,您可以使用Java实现的Xerces库操作DOM 。

希望这可以帮助您找出解决方案。