2011-12-21 62 views
5

在我正在开发的应用程序中,用户在文本框中输入HTML以编辑其页面上的元素。在这个阶段,用户可以添加任何类型的内容,甚至是破碎的HTML和一些文本节点。使用JavaScript清理HTML

要确保我得到有些干净的代码,我做这个

var s = document.createElement('div'); 
s.innerHTML = content; 
// loop over each node in s, and if text node is found, wrap in span. 
content = s.innerHTML 

在这个片段中的问题是,是内容是<TD>Text</TD>,结果我得到的是Text,因为不可能有一个TDDIV

在所有情况下是否有修复以获取有效内容?

回答

0

最好的解决方案是将您的HTML字符串传递到运行HTML Tidy的服务器页面,然后返回“干净”版本。我不知道任何强大的客户端解决方案,我害怕。

编辑:一个廉价的解决方案是使用DOM本身,或者用jQuery更快:

var input='<div><td>foo</td>'; 
var output = $('<div>'+html+'</div>').html(); //=> '<div>foo</div>' 

这不会清理所有的错误,但可能是够你。

1

使用DOM做这件事的问题是,你并不是真的想要完全纠正的HTML,因为你添加的条件,允许HTML是一个片段。你想修正一些格式不正确的HTML,有些则不是。

google搜索了一下扔了这个jQuery插件:http://www.davidpirek.com/blog/html-beautifier-jquery-plugin

,但我不能保证它。

我可能会同意格雷厄姆,并建议HTML Tidy,因为它是成熟和快速的,即使你必须等待响应。