如何删除AJAX XML响应的外部元素 - 第2部分

时间:2013-04-19 06:37:59

标签: jquery xml dom

好的,这一次打败了我。需要帮助,因为我浪费了很多时间。请看我之前回答过的同样的问题,但现在证明并没有真正做我想做的事 - how to remove outer element of AJAX XML Response

场景:服务器端向客户端浏览器发送text / xml响应有效负载,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><tbody><tr data-tt-parent-id="" data-tt-id="12345678" data-tt-branch="false"><td><span class="file">Total</span></td><td>data</td><td>data</td></tr></tbody>

我需要清理XML标记头,并删除tbody外部元素,并且可以接受作为DOM兼容的HTML插入到id =“tree”的表的tbody中。

澄清,我要求:

<tr data-tt-parent-id="" data-tt-id="12345678" data-tt-branch="false"><td><span class="file">Total</span></td><td>data</td><td>data</td></tr> as compliant HTML that will work with .html() or .append() etc

我希望能够利用JQuery解决方案,但现在仍然可以使用纯JavaScript来完成这项工作。

这个问题确实让我感到困扰。请帮助我理解我在这方面明显出错的地方。我尝试了与上一个问题相关的各种组合。谢谢大家的帮助。我承认我还不是一个jquery老手。

2 个答案:

答案 0 :(得分:0)

尝试

$(data).find('tbody').contents();

演示:Plunker

例如:

$.ajax({
    url:'data.xml',
    datatype: 'xml'
}).done(function(data){
    $('table').append($(data).find('tbody').contents())
})

答案 1 :(得分:0)

好的,这就是我为此而努力的方法。请注意这个事实,我真的很喜欢Arun提供的解决方案但是有理由(尽管在调试器中一切看起来很棒)它只是没有在我的情况下正确更新DOM(现代firefox)。所以这是我采取的丑陋方法:

$.ajax({
    async : false, 
    contentType: "text/xml; charset=utf-8",
    url : "/topnodes" 
}).done(function(xmlResponse) {
    $strData = xmlToString(xmlResponse);
    $out = $strData.replace('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', "");
    $out = $out.replace('<tbody>', "");
    $out = $out.replace('</tbody>', "");
    var rows = $($out).filter("tr");
    $('#tree tbody').html(rows);
   // do other stuff...
});

我不得不将这个东西从XML世界转换回标准的jquery世界可以处理的东西,因此使用了方便的xmlToString()方法(参见上一篇文章)。然后过滤掉tr元素并使用html()放置在tbody中。

Arun的方法看起来很棒,直到调用.html(),然后才更新DOM。如下:

$.ajax({
    async : false, 
    contentType: "text/xml; charset=utf-8",
    url : "/topnodes" 
}).done(function(xmlResponse) {
   var rows = $(xmlResponse).find('tbody').contents();
   $('#tree tbody').html(rows);
   // do other stuff...
});
Arun - 如果你还在阅读这篇文章,并且知道如何使用上面的内容(避免所有这些字符串替换和xml到字符串方法调用等),如果你能与我分享这些信息,我真的很感兴趣。谢谢你为了你的宝贵贡献。

如果有更简洁的方法可以获得结果,我现在不会将此标记为正确的答案。但如果那里的任何人都难以找到类似的解决方案,它确实有效。