HTML未在div内格式化,从而产生错误

时间:2019-05-21 18:46:11

标签: javascript html coldfusion

我有一个cfm(ColdFusion)页面,其中在我的div中显示#userHTML#变量的内容。

<cfoutput>
    <div class="panel panel-default" style="margin-left: 20px; margin-right: 20px;">
        <div id="myDiv" class="panel-body">                
            #userHTML#
        </div>
    </div>

    <br/><br/>
    <div class="col-sm-8 col-sm-offset-2">
        <!-- Some Code Here -->
    </div>
</cfoutput>

有时#userHTML#变量包含无效的HTML。它可能包含未关闭的打开<div>标记,这使我拥有<div class="col-sm-8 col-sm-offset-2">的其余代码位于顶部div(id="myDiv"

是否有一种方法可以使此工作有效,而与#userHTML#变量包含的内容无关,它将始终在div "myDiv"内包含它的内容?

2 个答案:

答案 0 :(得分:4)

该浏览器旨在原生解析该HTML。如果您需要XML,它将应用XML规则,并且导入格式错误的XML将会出错。如果您使用HTML,它将自动尽其所能纠正错误(所有HTML文档都是这种情况。

要达到此目的,您可以做(请参见代码中的注释):

// Create a new HTML Document (DOM)
var doc = document.implementation.createHTMLDocument ('', 'html', null);
// Add the body
var body = document.createElementNS('', 'body');
// Place the body into the DOM
doc.documentElement.appendChild(body);
// Get body parsed / corrected
body.innerHTML = "<div>This is a test";

// Now place that content into your existing DOM
document.getElementById('test').innerHTML = body.innerHTML;
// Get rid of the extra DOM
doc = null;
<div id="test">Test Div</div>

如果您检查输出的HTML,则会看到结尾</div>已自动添加。

答案 1 :(得分:1)

您可以使用JSOUP清理该HTML。 从https://jsoup.orghttp://central.maven.org/maven2/org/jsoup/jsoup/获取相关的JAR文件,并将其放在您的lib文件夹中。

然后像这样使用JSOUP

<cfset oJSOUP = CreateObject("java", "org.jsoup.Jsoup" )>
<cfset oJSOUPWL = CreateObject("java", "org.jsoup.safety.Whitelist" ).init()>
#oJsoup.clean( 
    javaCast( "string", userHTML ), 
    "http://example.com/", 
    oJSOUPWL.relaxed().preserveRelativeLinks( true ) 
)#

这将删除不需要的HTML,例如未关闭的DIV。