场景:我希望通过 AJAX 将元素列表返回给浏览器。使用 JAXB 进行编组,并且由于 XML 需要根元素(JSON 不需要...),我将列表包装在信封(包装器)元素中。现在在客户端(浏览器)上,我希望删除外部元素,使内部元素列表保持不变。然后我希望将提取的元素列表放入 HTML Dom。我怎样才能做到这一点?
澄清示例:
想寄:
<tr><td>data</td></tr><tr><td>data</td></tr>
由于对 text/xml 响应类型的限制(为了符合 XML),我将其包装为:
<tbody><tr><td>data</td></tr><tr><td>data</td></tr></tbody>
因此,在我的 jquery 回调方法中,我收到了上述内容(作为 xml 对象)。我怎样才能(没有特定的顺序,除了任何工作)删除 tbody 元素,并确保剩余的 tr 标签是可接受的 domData。我玩过 find()、filter() 等,但仍然没有解决这两个要求的解决方案。
感谢所有已经回复的人!这个真的让我很困扰。如果不测试所有提供的答案,似乎有多种方法可以做到这一点,并且每个答案都可能被标记为正确的答案。我实际上是这样做的:
}).done(function(xmlResponse) {
$strData = xmlToString(xmlResponse);
$html = $($strData);
$('#mytable tbody').html($html.contents());
});
出于某种原因,如果没有首先将 xml 转换为字符串的显式标注,它就不起作用。此后,将字符串包装在 $() 中强制它符合 DOM,然后 contents() 方法负责提取(删除)外部元素。
这是 xmlToString() 方法。如果有人能指出我如何消除对这种丑陋方法的需求,那肯定是一个奖励。它看起来像是 2009 年之前的 html 应用程序:
function xmlToString(xmlData) {
var xmlString;
if (window.ActiveXObject){
xmlString = xmlData.xml;
} else{
xmlString = (new XMLSerializer()).serializeToString(xmlData);
}
return xmlString;
}
我会将我读到的第一个答案标记为正确,因为它足以让我越过终点线。