[英]How to iterate all the children including those without tags in an DOM element with JavaScript
我试图解析像这样的红宝石标签:
<div id="foo">
<ruby>
<rb>気</rb>
<rp>(</rp>
<rt>き</rt>
<rp>)</rp>
</ruby>
が
<ruby>
<rb>狂</rb>
<rp>(</rp>
<rt>くる</rt>
<rp>)</rp>
</ruby>
ってしまう。
</div>
问题是,我无法迭代所有子元素,包括那些没有标签的子元素。 所有的函数,例如: document.getElementById("foo").children
和$("#foo").children()
仅返回两个ruby标签,而中间没有文本。
我正在尝试获取类似的列表:
有没有办法获取所有标签和文本的列表?
您可以使用Node.childNodes
(请参阅文档 )
document.getElementById("foo").childNodes
但是,这可能会变得棘手:
在HTML中,在<div>
标记和<ruby>
标记之间,有空格和换行符。 这里将其解析为TextNode
。 因此.childNodes
将返回5个节点:
<div>
和第一个<ruby>
(包括换行符和空格)。 <ruby>
元素。 <ruby>
元素之间的文本(包括两个换行符和空白) <ruby>
元素。 </ ruby>
和</ div>
之间的文本。 (包括换行符和空格) 因此,如果只需要非空的TextNode,则实际上有一些文本时:
const nodes = [...document.getElementById('foo').childNodes].filter(node => !node.nodeValue || node.nodeValue.trim())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.