【问题标题】:JQuery's ajax function stripping HTML tags from XMLJQuery 的 ajax 函数从 XML 中剥离 HTML 标签
【发布时间】:2012-11-21 07:03:13
【问题描述】:

好的,我正在从 XML 文件中提取数据以动态填充我的网页元素。我的问题是,当我使用 JQuery .ajax 提取 xml 文件时,它会剥离我的 HTML 标签。

例如,

XML 文件中的数据:

<transcript><p>Hello, world</p></transcript>

网页上所需的输出:

<p>Hello, world</p>

实际输出:

Hello World

这是我的 ajax 函数中的代码:

$(xmlData).find('item').each(function() {
        var n = $(this).find('transcript').text();

我尝试使用 JQuery 的 '.html()' 但它返回 null。我可以解决此问题的最简单方法是什么?最好不要改变太多我已经做过的事情。

提前致谢。

【问题讨论】:

  • @roasted 不,它没有。查看.html 的 API 文档 - XML 文档不支持它
  • 您的 xml 不使用 CDATA 部分将 html 内容与 xml 标签分开?这是自找麻烦……
  • 不确定您遇到问题的原因:jsfiddle.net/qe7GB
  • @roasted 我本来希望 .html 也能工作,但它在 jQuery 文档中说不
  • @ExplosionPills 没问题,是的,Javascript 支持以与修改 DOM 类似的方式修改它们。但是这里有一些你可以在 jQuery 中使用的东西——api.jquery.com/jQuery.parseXML——用你提供的字符串创建一个,然后你就可以使用它了。我知道还有其他非 jQuery 使用的参考资料,但这对谷歌来说很容易

标签: javascript jquery html xml ajax


【解决方案1】:

使用text 将按照您的经验剥离标签。您可以改为在脚本节点上使用 jQuery children 方法 (reference) 来获取 HTML。这是一个工作示例:http://jsfiddle.net/gjwyd/

$(document).ready(function() {
    $.ajax({
        type: "POST",
        url: "/echo/xml/",
        dataType: "xml",
        data: {
            xml: "<transcript><p>Hello, world</p></transcript>"
        },
        success: function(xml) {
            var container = $('#content');
            var html = $(xml).find('transcript').children();
            container.html(html);
        }
    });
});​

关键是这一行:

var html = $(xml).find('transcript').children();

并确保将 dateType 设置为 xml。

问题

从 XML 响应中获取 HTML 时,可能会缺少默认样式。例如,段落标签可能没有display: block。重置样式可能是解决此问题的一种方法。一种更正确且可能更简单的方法是将 HTML 内容放入 XML 中的 CDATA 中,正如其他评论者所建议的那样。

http://jsfiddle.net/tZJQp/

$(document).ready(function() {
    $.ajax({
        type: "POST",
        url: "/echo/xml/",
        dataType: "xml",
        data: {
            xml: "<transcript><![CDATA[<p>Hello, world</p><p>Bye</p>]]></transcript>"
        },
        success: function(xml) {
            var container = $('#content');
            var html = $(xml).find('transcript').text();
            container.html(html);
        }
    });
});

正如其他人所说,html 不适用于 XML。

【讨论】:

  • 这是对的,但我认为 OP 确实希望将 &lt;p&gt;Text&lt;/p&gt; 放在页面上。
  • 另一个重要的部分是dataType: "xml" +1
  • 还有:“html 不起作用是合理的,因为 AJAX 请求返回的 XML 不是当前文档的 DOM 的一部分。”是不正确的。您可以在非 DOM 元素上使用 .html,但不能在 XML 文档元素上使用它
  • @Ian 除非您使用的是 IE7 或 8。如果您不填充它们并尝试像对待任何其他 html 元素一样对待它们,未知标签往往会在 oldIE 中引起问题。
  • @Ian 是的,例如,IE8 不会认为 &lt;transcript&gt;&lt;/transcript&gt; 是一个有效元素并且会删除它,或者它不会是可选择的,所以 .find("transcript") 应该返回如果 xml 是 html 而不是 xml 文档,则为 0 个元素。
猜你喜欢
  • 2014-10-09
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
相关资源
最近更新 更多