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

时间:2012-07-28 00:46:48

标签: javascript e4x

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

如何抓取子节点中的文本,全部作为一个字符串?

干杯

2 个答案:

答案 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版本:

.contents

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()的内容。