Javascript E4X-返回节点及其子节点的文本

Javascript E4X - Return the text of node and its children?

本文关键字:子节点 文本 E4X- 返回 节点 Javascript      更新时间:2024-05-06

我正在尝试解析一些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"

如何获取子节点中的文本,所有这些都作为一个字符串?

干杯

我不知道E4X,但我可以假设纯JavaScript是可以的吗?

textContent似乎与版本9之前的IE没有很好的兼容性。当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();

在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()的代码。