在IE9中使用jQuery进行XML解析时缺少innerHTML,但Chrome中没有

innerHTML missing when XML parsing with jQuery in IE9 but not Chrome

本文关键字:innerHTML Chrome IE9 jQuery 进行 XML      更新时间:2023-09-26

我正在一些包含HTML的简单内容上使用jQuery的XML解析器。

使用 jQuery 的

.html() 或标准 JavaScript .innerHTML提取完整的 HTML 文本在 Chrome 中运行良好,但在 Internet Explorer 9 中则不行。 jQuery 的.text()在这两种情况下都有效,但我也需要提取 html 标记。

如何使其也适用于IE9?

您可以在此处进行测试:http://jsfiddle.net/199vLsgz/

.XML:

<script id="xml_data" type="text/xml">
    <model_data name="The model ">
          <person_responsible></person_responsible>
          <objects>
               <object name="Available B reports" id="obj1" >
                   <description>this is a description <br/> oh look, another line!</description>
               </object>
          </objects>
     </model_data>
</script>

法典:

$(function() {
    var xml = $("#xml_data").text();
    var xmlDoc = $.parseXML(xml);
    $xml = $(xmlDoc);
    var desc = $xml.find("model_data > objects > object[id='obj1'] > description");
    alert(desc.html());
})

XML元素在IE中没有定义innerHTML,这是jquery的html函数一起使用的。

首先,您需要使用 CDATA 在 xml 标签中保留标签

<description><![CDATA[this is a description <br/> oh look, another line!]]></description>

然后,您可以尝试使用 textContent 属性:

alert(desc[0].textContent); //desc.text() will also work now

您还可以使用以下方法正确添加内容:

$('#some-container').html(desc[0].textContent);

$(function() {
    var xml = $("#xml_data").text();
    var xmlDoc = $.parseXML(xml);
    $xml = $(xmlDoc);
    console.log($xml)
    var desc = $xml.find("model_data > objects > object[id='obj1'] > description");
    alert(desc[0].textContent);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script id="xml_data" type="text/xml">
    <model_data name="The model">
          <person_responsible></person_responsible>
          <objects>
               <object name="Available B reports" id="obj1" >
                   <description><![CDATA[this is a description <br/> oh look, another line!]]></description>
               </object>
          </objects>
     </model_data>
</script>