javascript - 获取嵌套子节点javascript的文本

标签 javascript dom nodes

虽然我看了很多关于这个主题的帖子,但我无法得到想要的结果。
我的目标是在纯 JavaScript 中获取嵌套子节点的文本。 使用此代码

function GetChildNodes () {
    var container = document.getElementById ("find");
    for (var i = 0; i < container.childNodes.length; i++) {
        var child = container.childNodes[i];
        if (child.nodeType == 3) {
           var str=child.nodeValue
           console.log(str)
        }
        else {
            if (child.nodeType == 1) {
                var str=child.childNodes[0].nodeValue
                console.log(str)                        
            }
        }
    }
}

GetChildNodes()

如果html是我可以得到文本

<div id="find">
    aaa
    <div>aaa</div>
    <div>aaa</div>
    <div>aaa</div>
    <div>aaa</div>
</div>

但是用这样的html代码

<div id="find">
    aaa
    <div>aaa<div>bbb</div></div>
    <div>aaa<div>bbb</div></div>
    <div>aaa</div>
    <div>aaa</div>
</div>

...错了。
你能给我一个解决方案吗?

最佳答案

如果您不需要逐个节点地获取文本,您可以使用 node.textContent 从祖先获取所有文本,

var str = document.getElementById('find').textContent;
console.log(str);

否则,您将需要遍历或递归 DOM 树以查找 nodeType 3 并访问 .data.childNodes 否则,例如递归

function getText(node) {
    function recursor(n) {
        var i, a = [];
        if (n.nodeType !== 3) {
            if (n.childNodes)
                 for (i = 0; i < n.childNodes.length; ++i)
                     a = a.concat(recursor(n.childNodes[i]));
        } else
            a.push(n.data);
        return a;
    }
    return recursor(node);
}
// then
console.log(getText(document.getElementById('find')));

关于javascript - 获取嵌套子节点javascript的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23030080/

相关文章:

javascript - 复制文本框的按钮

javascript - parseInt() 导致 javascript 函数的返回值是预期结果的 0.77 倍,基数指定为十进制

javascript - 括号中的 JSLint 表示音频未定义,但不会提示图像

javascript - 创建一个 while 循环,在一定的尝试后中断 - NodeJS

javascript - 可以将外部库导入 xsjs 或 xsjslib 文件吗?

javascript - 尽管已安装,但无法解析模块 style-loader!css-loader

PHP:错误检查中的错误

javascript - 根据自己已有的内容替换header标签的内容

java - 如何在不使用 head 的情况下打印链表的元素

C++ 创建一个每个节点超过 2 个字段的链表