HTML не отформатирован внутри ошибки создания div - PullRequest
1 голос
/ 21 мая 2019

У меня есть страница cfm (ColdFusion), где я отображаю содержимое переменной #userHTML# внутри моего div.

<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 ]

4 голосов
/ 21 мая 2019

Браузер предназначен для анализа этого 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> был добавлен автоматически.

2 голосов
/ 22 мая 2019

Вы можете использовать JSOUP для очистки этого HTML. Получите соответствующий файл JAR из https://jsoup.org или http://central.maven.org/maven2/org/jsoup/jsoup/ и поместите его в папку 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...