我正在尝试解析一些有重复代码行的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"
如何将子节点中的文本也作为一个字符串抓取?
干杯
我正在尝试解析一些有重复代码行的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()
直接调用类似的代码。