好的,这一次打败了我。需要帮助,因为我浪费了很多时间。请看我之前回答过的同样的问题,但现在证明并没有真正做我想做的事 - 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老手。
答案 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...
});
如果有更简洁的方法可以获得结果,我现在不会将此标记为正确的答案。但如果那里的任何人都难以找到类似的解决方案,它确实有效。