Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过DOM进行递归搜索以去除内部文本_Javascript_Dom - Fatal编程技术网

Javascript 通过DOM进行递归搜索以去除内部文本

Javascript 通过DOM进行递归搜索以去除内部文本,javascript,dom,Javascript,Dom,我需要递归地搜索DIV层次结构并获取内部文本。我只能通过一个ID来识别父母,但这是唯一一致的信息。我知道在元素的子元素中有一个div,其中包含文本。通过所有的孩子和孩子的孩子递归地做这件事的最好方法是什么 以下是我得到的记录: Found text: .rLshyf,.BmP5tf{padding-top:56px;padding-bottom:56px} Found text: .w1C3Le,.BmP5tf,.G5NbBd{padding-left:112px;padding-right:1

我需要递归地搜索DIV层次结构并获取内部文本。我只能通过一个ID来识别父母,但这是唯一一致的信息。我知道在元素的子元素中有一个div,其中包含文本。通过所有的孩子和孩子的孩子递归地做这件事的最好方法是什么

以下是我得到的记录:

Found text: .rLshyf,.BmP5tf{padding-top:56px;padding-bottom:56px}
Found text: .w1C3Le,.BmP5tf,.G5NbBd{padding-left:112px;padding-right:112px;}
Found text: .G5NbBd{padding-bottom:56px}
Found text: .ROYx{display:flex;justify-content:space-between}
Found text: .SkmBxc{width:988px;margin-right:68px}
Found text: .EURV7d{font-weight:500;margin-top:-8px}
Found text: .j8epzd{height:192px;margin-top:16px}
Found text: .UYT3jb{width:100%;height:2px;margin-top:24px;margin-bottom:24px;background-color:#303030}
Found text: .z24g9c{margin-top:32px}
Found text: .GsVE9b{float:right}
Found text: .MUxGbd{font-size:28px;font-family:Roboto,sans-serif;line-height:40px;padding-top:2px;margin-bottom:-2px}
Found text: .MUxGbd.ITUZi{font-size:40px;line-height:48px}
Found text: .lyLwlc{color:#202124}
Found text: .aLF0Z{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}
Found text: .MUxGbd.v0nnCb{font-size:32px;line-height:48px;padding-top:6px;margin-bottom:-6px;}
Found text: .lEBKkf{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}
Found text: .L6lOSd{color:rgba(255,255,255,.5) !important}
Found text: .L6lOSd svg{fill:rgba(255,255,255,.5);height:24px;width:24px;vertical-align:middle;margin-left:8px}
Found text: .L6lOSd:hover{background-color:#303030;color:rgba(255,255,255,1) !important}
Found text: .L6lOSd:hover svg{fill:rgba(255,255,255,1)}
Found text: .L6lOSd:focus{background-color:#303030;color:rgba(255,255,255,1) !important}
Found text: .L6lOSd:focus svg{fill:rgba(255,255,255,1)}
Found text: .MUxGbd.gbj1yb{font-size:24px;line-height:32px;padding-top:0px;margin-bottom:-8px}
Found text: .WZ8Tjf{color:#70757A}
Found text: .WZ8Tjf a:visited{color:#acacac}
Found text: Is iPhone 8 waterproof?
Found text: The iPhone 8 and 8 Plus is not waterproof — no smartphone is. However, as you stated yourself, they do have an IP67 rating for dust and water-resistance.
Found text: Source: damage - Does the iPhone 8 have any sort of water resistance or ...
Found text: window.onUrlClick=function(a){var b=a.getAttribute("data-url");a=a.getAttribute("data-follow-up-query");b?window.parent.postMessage({url:{href:b}},"*"):a&&window.parent.postMessage({query:{queryText:a}},"*")};
Found text: const ENTER_KEYCODE = 13;const ENTER = 'Enter';

我不明白为什么我要得到所有的内部样式文本。如何获取可显示的文本内容?

以下是如何删除元素中的所有文本节点:

function removeTextNodes(element){
    let i = 0;
    while (i<element.childNodes.length){
        let node = element.childNodes[i];
        if (node.nodeType==3){
            element.removeChild(node);
        }else if(node.nodeType==1){
            removeTextNodes(node);
            i++;
        }
    }
}
函数removeTextNodes(元素){
设i=0;

而(i处理递归的最佳方法是创建一个递归函数,因此这里是如何从父级到树的整个过程

函数递归(元素){
if(element.childElementCount==0){
element.textContent='';
}否则{
Array.from(element.children).forEach(child=>{
海鳗(儿童);
});
}
}
函数removeInnerText(元素){
电鳗(元素);
}
//用法
const parentElement=document.getElementById('parent');

removeInnerText(parentElement);
如果要记录文本节点的内容:

function logInnerText(elem) {
  if (elem.nodeType === Node.TEXT_NODE && elem.nodeValue.trim())
    console.log(elem.parentNode.nodeName + ' contains ' + elem.nodeValue.trim())
  elem.childNodes.length && elem.childNodes.forEach(el => logInnerText(el))
}

logInnerText(document.getElementById('someId'))

寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小、完整且可验证的示例。在我的案例中,问题是我也从style和sc中获取文本ipt节点。我不明白为什么这必须被否决,除非可能有重复的问题。日志完全不相关,@LeeProbert询问如何做到这一点,而不仅仅是请求调试帮助。我在添加调试日志之前提供了答案,而现在日志并不是真正相关的。这会让问题变得更加混乱我的意见