我正在尝试解析一些html,其中有重复的代码行,例如:
<a>This is <span>some text</span> but its <span>not grabbing the span</span> content</a>
所以我循环遍历该对象并解压缩:
object.a[i].text();
但它只返回
"This is but its content"
如何抓取子节点中的文本,全部作为一个字符串?
干杯
答案 0 :(得分:0)
我不知道E4X,但我可以假设纯JavaScript是好的吗?
textContent
doesn't seem to have great compatibility for IE prior to version 9。这在textContent
可用时有效。但是我没有IE8所以我无法用它进行测试,但这也应该可以。
var obj = (!object.a[i].innerText) ? object.a[i].textContent : object.a[i].innerText;
这适用于客户端实现,但由于它在您的实现中不起作用,我猜您将需要更具体的设置;不幸的是,我在那里做的并不多。然而,我会给它一个更纯粹的JS刺。这遍历object.a [i]的每个子节点,确定它是textNode还是elementNode并分别提取数据或innerHTML。
var doesThisWork = '';
var children = object.a[i].childNodes;
for(x in children){
doesThisWork += (children[x].nodeType === 1) ? children[x].innerHTML : children[x].data;
}
我将离开jQuery版本:
object.a[i].contents().text();
答案 1 :(得分:0)
在Rhino中,这将起作用:
var a = <a>This is <span>some text</span> but its <span>not grabbing <b>the</b> span</span> content</a>;
print(XML_innerText(a));
function XML_innerText(node) {
var result = [];
for each (var i in node.descendants()) {
if (i.nodeKind() == 'text') {
result.push(i);
}
}
return result.join(' ');
}
在ecma / js的更高级变体中,您可以使用相同的代码,但将其移动到XML.prototype.innerText中,然后直接调用类似a.innerText()
的内容。