2013-02-27 2 views
0

Когда я использую ниже блок кода для тестирования, Я пишу свой исходный HTML-код, который начинается с <xsl:key name="Name" match="/NewSet/ps1/Name/text()" use="." />, в первый квадрат, я получаю результат из третьего окна, которое называется «HTML-режим IFRAME », как <xsl:key name="Name" match="/NewSet/ps1/Name/text()" use="." ></xsl:key>Предотвращение удаления «/» в HTML

Результат с тегом /, как я могу предотвратить эту проблему.

Я думаю, что речь идет о текстовом движке браузеров? Не так ли?

<html> 
<head> 
    <title>Editable IFRAME test</title> 
</head> 
<body onload="SetEditable()"> 
    <b>Set your original HTML content here:</b><br /> 
    <textarea id="htmlArea" style="width: 783px; height: 189px"></textarea> 
    <br /> 
    <input type="button" onclick="CreateHtml();return false;" value="Set Content in the IFRAME"> 
    <br /> 
    <b>Editable IFRAME element:</b> 
    <br /> 
    <div style="width: 800px; height: 600px; border: 1px solid red;"> 
     <iframe style="padding-bottom: 0px; margin: 0px; padding-left: 0px; width: 100%; 
      padding-right: 0px; height: 100%; padding-top: 0px" frameborder="0" src="javascript:void(0)" 
      id="editor"></iframe> 
    </div> 
    <input type="button" onclick="ShowIFRAMEHTML();return false;" value="Show IFRAME HTML"> 
    <br /> 
    <b>HTML Mode of the IFRAME:</b> 
    <br /> 
    <textarea id="htmlMode" style="width: 783px; height: 313px"></textarea> 
    <script type="text/javascript"> 
     var editor1 = document.getElementById("editor"); //reference to the IFRAME element 
     var htmlArea1 = document.getElementById("htmlArea"); //reference to the HTML area in which we put the content 
     var htmlMode = document.getElementById("htmlMode"); //reference to the HTML area that displays the IFRAME content 
     var oDocument = editor1.contentWindow.document; 

     var sMarkup = "<html><head><title>New Document</title></head>" + 
        "<body contenteditable=true style='overflow:scroll;margin:0px;padding:0px;height:100%'>" + 
        "&nbsp;</body></html>"; 

     function SetEditable() { 
      oDocument.open(); 
      oDocument.write(sMarkup); 
      oDocument.close(); 
      oDocument["designMode"] = "on"; 
      oDocument.execCommand("2D-Position", false, true); 
     } 
     function CreateHtml() { 
      oDocument.body.innerHTML = htmlArea1.value; 
      htmlMode.value = oDocument.body.innerHTML; 
     } 
     function ShowIFRAMEHTML() { 
      alert(oDocument.body.innerHTML); 
     } 

    </script> 
</body> 
</html> 
+1

вместо 'innerHTML' вы пытались использовать' .innerText' или '.textContent' (например,' htmlMode.value = (oDocument.body.innerText || oDocument.body.textContent) ') –

+0

Вы правы @Pedro Эстрада, спасибо .. –

ответ

0

Нет, речь идет о том, как создается значение для innerHTML.

Вы помещаете HTML-код в iframe, что заставляет его анализировать его на элементы. Затем вы получаете эти элементы как HTML, который будет создавать новый HTML-код из elemtns, а не возвращать исходную строку, которая использовалась для создания элементов.

Если вы проверите это в разных браузерах, вы увидите, что у вас разные результаты. Некоторые браузеры могут, например, использовать имена тегов, переупорядочить атрибуты или даже преобразовать элементы в какой-либо допустимый элемент HTML или окружить его элементами HTML, чтобы сделать его действительным документом.

Если вы хотите, чтобы результат был закрывающим тегом, вам нужно поместить в iframe документ XHTML (или, возможно, документ HTML5), иначе он будет возвращен как HTML, который не имеет никаких закрывающих тегов ,

Смежные вопросы