HTML 未在 div 内格式化生成错误
HTML not formatted inside div generating error
我有一个 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"
中?
浏览器旨在本机解析 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>
已自动添加。
您可以使用 JSOUP
来清理那个 HTML。
从 https://jsoup.org or http://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。
我有一个 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"
中?
浏览器旨在本机解析 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>
已自动添加。
您可以使用 JSOUP
来清理那个 HTML。
从 https://jsoup.org or http://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。