Javascript 如何在DOM元素中查找所有文本及其父元素

Javascript 如何在DOM元素中查找所有文本及其父元素,javascript,algorithm,dom-traversal,Javascript,Algorithm,Dom Traversal,我找不到一种方法来获取只包含选项卡的节点同级,这样我就可以扔掉它们,只获取文本和它的父节点 <html> <head><title>My page</title></head> <body> <div id="container"> <div id="subject"> <div> divText <span> <a> aT

我找不到一种方法来获取只包含选项卡的节点同级,这样我就可以扔掉它们,只获取文本和它的父节点

<html>
<head><title>My page</title></head>
<body>

  <div id="container">
    <div id="subject">
      <div> divText <span>
        <a> aText </a>
        spanText </span>
      </div>
    </div>
  </div>

  <script>

    var subject = document.getElementById('subject');

    function printInnerText(ele)
    {
        var childrens = ele.childNodes;

        if (childrens.length > 1)
        {
            for (var i = 0; i < childrens.length; i++)
            {
                printInnerText(childrens[i]);
            }
        }
        else
        {
            console.log(ele.innerText);
        }
    }

    printInnerText(subject);

  </script>
</body>
</html>

我的页面
divText
aText
西班牙文
var subject=document.getElementById('subject');
函数printInnerText(ele)
{
var childrens=ele.childNodes;
如果(儿童长度>1)
{
对于(变量i=0;i
如果“#text”包含文本内容(和wholeText)作为
输入
选项卡
,我只需要移动到下一个node.nextSibling。我只需要找到文本和他的父母

<html>
<head><title>My page</title></head>
<body>

  <div id="container">
    <div id="subject">
      <div> divText <span>
        <a> aText </a>
        spanText </span>
      </div>
    </div>
  </div>

  <script>

    var subject = document.getElementById('subject');

    function printInnerText(ele)
    {
        var childrens = ele.childNodes;

        if (childrens.length > 1)
        {
            for (var i = 0; i < childrens.length; i++)
            {
                printInnerText(childrens[i]);
            }
        }
        else
        {
            console.log(ele.innerText);
        }
    }

    printInnerText(subject);

  </script>
</body>
</html>

顺便说一句,ie innerText只提供不带制表符的文本,但我发现chrome的工作原理不同。

执行此操作的递归方法(基于您最初的尝试)是检查是否等于type
节点。当您遍历子体时,当您找到文本时,然后,您可以使用检查是否存在
非空的
文本,在这种特殊情况下,您可以获取父文本和相关文本。如下一个示例中所示:

var subject=document.getElementById('subject');
函数clasifyTextByWrapper(ele)
{
if(ele.nodeType===Node.TEXT\u Node&&ele.nodeValue.trim())
log(ele.parentNode.nodeName+)包含文本:“+ele.nodeValue.trim()”;
ele.childNodes.length&&ele.childNodes.forEach(e=>clasifyTextByWrapper(e));
}
clasifyTextByWrapper(主题)

divText
aText
西班牙文

除了删除制表符和新行之外,您是否需要获取所有文本?是的,这正是我需要做的。是否有任何原因导致此简单代码不适用于您:
var subject=document.getElementById('subject');console.log(subject.innerText)这段代码有效,但是我需要知道包含文本的标记元素:例如-divText、spanText、aText。为了澄清这一点,我需要抓取只属于父标记的文本,所以。。。。作为一个div,我不需要整个div-:divText-attext-spanText,但只需要divText,其余的属于其他孩子。