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

Javascript E4X-返回节点及其子节点的文本?,javascript,e4x,Javascript,E4x,我试图解析一些html,其中有重复的代码行,例如: <a>This is <span>some text</span> but its <span>not grabbing the span</span> content</a> 但它只会回来 "This is but its content" 如何将子节点中的文本也捕获为一个字符串 干杯我不知道E4X,但我可以假设纯JavaScript可以吗 textContent

我试图解析一些html,其中有重复的代码行,例如:

<a>This is <span>some text</span> but its <span>not grabbing the span</span> content</a>
但它只会回来

"This is  but its  content"
如何将子节点中的文本也捕获为一个字符串


干杯

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

textContent
。当
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版本:

:


在Rhino中,这将起作用:

var a=这是一些文本,但它没有抓住跨度内容;
print(XML_-innerText(a));
函数XML_innerText(节点){
var结果=[];
对于每个(node.subjects()中的变量i){
如果(i.nodeKind()=='text'){
结果:推(i);
}
}
返回结果。join(“”);
}

在ecma/js的更高级变体中,您可以使用相同的代码,但将其移动到XML.prototype.innerText中,然后直接调用类似于
a.innerText()
的内容。

位于对象内部,因此您还需要循环遍历其子对象。因为你没有给出你如何做循环的细节,所以很难帮助你。。。你在使用jquery吗?它实际上是yahoo开放数据表中的javascript。yahoo返回一个E4X对象,而im只是使用一个js for循环来循环返回的“a”标记的长度。如果没有简单的方法让E4X返回批次-我如何循环遍历子项并保持文本字符串有序?编辑:没有jQueryavailable@Chris从我在MDN上读到的内容来看,E4X几乎不受欢迎。如果Yahoo返回一个表示XML数据的字符串,您应该能够使用jQuery或类似的库对其进行解析。。。所以(在jQuery中)<代码>$(responseXML)。查找('a')…查看页面的最底部。。。它有一种适合孩子们的环。。。我不确定它是否仍然会抓取你的文本,虽然或只是在跨度的文本。。。可能需要一些处理。@谢谢,我通常不会在客户端使用它,但是Yahoo数据表中的查询会以E4X的形式返回数据,javascript正在服务器端运行,因此没有可用的jquery/库=(再次感谢Gary。这个javascript是由yahoo在服务器端运行的,只要他们支持它,应该都很好。不幸的是。textContent没有返回任何内容=(我使用了一个组合。toXMLString()如果有人能想出一个更优雅的解决方案,我将万分感激,但我现在就用这个解决方案。感谢你的努力。仍然没有从任何方法返回任何结果-但我认为这只是yahoos javascript的不足-将为搜索者标记正确的答案在一般的JS E4X环境中,再次感谢您。我想我已经通过迭代子对象解决了一些问题。我会在它工作时进行更新。单独抓取子对象文本时遇到的问题是,您无法单独获取每个子对象之间的“a”标记文本。因此,您将返回“这只是它的内容一些文本没有抓取span”而不是“这是一些文本但是它没有抓取span内容”-如果这有任何意义如果我理解正确,您能够返回任何文本节点,它们是直接的子标记,但不是任何子标记的内容?
var doesThisWork = '';
var children = object.a[i].childNodes;
for(x in children){
doesThisWork += (children[x].nodeType === 1) ? children[x].innerHTML : children[x].data;
}
object.a[i].contents().text();