2013-12-23 18 views
2

处理的一个示例是将所有字符更改为大写。网页将在客户端处理之前完全加载。我只想处理网页上可见的字符。这意味着我不会触及不可查看的HTML标签等。但是我需要修改非HTML源代码的输出,比如JavaScript document.write或者PHP脚本,它们会发送字符到输出。如何处理网页上的所有可查看字符?

我想使用JS HTML DOM。这是一个好机制吗?寻找任何其他的想法。

+1

对于这个特定的例子,CSS可能是一个很好的方法。应用CSS规则'* {text-transform:uppercase!important; ''达到了预期的效果。对于其他转换,CSS可能不会是一个选项。 – icktoofay

+0

谢谢,但正如你猜对的,我正在寻找一个通用的解决方案。例如,如果我正在使用JS来完成这项工作,则广义解决方案将简单地调用一个函数transform()。函数transform()将文本转换为大写或别的东西。 – sm535

回答

1

在最简单的情况下,只关心发送给客户端的HTML,几乎所有的语言都可以。但是,当你关心动态生成的内容时,你是对的 - 客户端DOM是唯一的出路。

从本质上讲,这里是你应该做的事情:

  1. 编写一个函数来递归地走节点和变换文字和CDATA节点的nodeValue
  2. 连接一个mutation observer,检查childList文档子树中的更改。当带有addedNodes的记录进入时,为列表中的每个节点运行上一个函数。
  3. 最后,在文档上运行转换以修复已存在的任何内容。

请记住,突变观察者是DOM的一个相对较新的添加。如果您需要更多的支持,您可能需要添加一个回退到mutation events,但即使那些没有广泛的支持,他们会显着降低性能。

相关问题