0

好吧,这个人公平地击败了我。需要帮助,因为我在这个上浪费了几个小时。请看我之前回答过的同样的问题,但现在证明实际上并没有做我想做的事 -如何删除 AJAX XML 响应的外部元素

场景:服务器端向客户端浏览器发送一个 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 的老手。

4

2 回答 2

0

尝试

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

演示:Plunker

前任:

$.ajax({
    url:'data.xml',
    datatype: 'xml'
}).done(function(data){
    $('table').append($(data).find('tbody').contents())
})
于 2013-04-19T06:45:11.733 回答
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 到字符串方法调用等,如果您能与我分享这些信息,我会非常感兴趣。谢谢您的重视贡献。

我暂时不会将此标记为正确答案,以防有更简洁的方法来获得结果。但如果有人很难找到类似的解决方案,它确实有效。

于 2013-04-19T07:40:18.587 回答