1

我正在尝试解析一些有重复代码行的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"

如何将子节点中的文本也作为一个字符串抓取?

干杯

4

2 回答 2

0

我不知道 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();
于 2012-07-28T01:00:22.637 回答
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()直接调用类似的代码。

于 2012-12-08T17:02:02.753 回答