Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.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 尝试查找所有HTML注释时出现太多递归错误_Javascript_Html - Fatal编程技术网

Javascript 尝试查找所有HTML注释时出现太多递归错误

Javascript 尝试查找所有HTML注释时出现太多递归错误,javascript,html,Javascript,Html,下面的脚本用于查找页面中的所有html注释(共4条),并将它们作为一个字符串返回。我运行了下面的脚本,收到了一个“太多递归”错误 我是创建了一个无限循环还是做了其他事情 function findComment() { var olElement = document.getElementById("everything");//this is the id for my body element var comments = new Array();

下面的脚本用于查找页面中的所有html注释(共4条),并将它们作为一个字符串返回。我运行了下面的脚本,收到了一个“太多递归”错误

我是创建了一个无限循环还是做了其他事情

function findComment()
{ 
        var olElement = document.getElementById("everything");//this is the id for my body element
        var comments = new Array();

        if (olElement.nodeType == 8)
        {
            comments[comments.length] = olElement;
        } else if(olElement.childNodes.length>0)
            {
                for (var i = 0; i<olElement.childNodes.length; i++)
                {
                    comments = comments.concat(findComment(olElement.childNodes[i]));
                }
            }
        alert(comments);
}

//window.onload = countListItems;
//window.onload = countTagItems;
//window.onload = getElements;
window.onload = findComment;
函数findComment()
{ 
var olElement=document.getElementById(“一切”);//这是我的body元素的id
var comments=新数组();
if(olElement.nodeType==8)
{
注释[comments.length]=olElement;
}else if(olement.childNodes.length>0)
{

对于(var i=0;i将olements变量移到函数外部,并传入要搜索的元素

var comments = new Array();
function findComment(element)
{ 
        if (element.nodeType == 8)
        {
            comments[comments.length] = element;
        } else if(element.childNodes.length>0)
            {
                for (var i = 0; i<element.childNodes.length; i++)
                {
                    comments = comments.concat(findComment(element.childNodes[i]));
                }
            }
        return comments;
}

var olElement = document.getElementById("everything");//this is the id for my body element
alert(findComment(olElement));
var comments=new Array();
函数findComment(元素)
{ 
if(element.nodeType==8)
{
注释[comments.length]=元素;
}else if(element.childNodes.length>0)
{

对于(var i=0;i这是一个粗略的版本,说明了如何使用递归来实现它。它不是很优雅,但可以完成以下工作:

功能fico(el){
if(el.nodeType==8)返回[el.textContent.trim()]
else返回[…el.childNodes].map(fico);
}
console.log(fico(document.querySelector(“一切”)).toString().replace(/,+/g,,”);

某物
里面有东西
还有更进一步的事情
在…内
信息技术
更规则的文本
够了。

更新:我尝试了上述两种方法,但收到的错误是“element”或“el”为空。因此…进展顺利。我将完整的代码和html放在一起,发布如下:

    <!DOCTYPE html>
    <html>
        <head>
            <title>A Simple Page</title>
            <script>
                var comments = new Array();
                    function findComment(element)
                    { 

                            if (element.nodeType == 8)
                            {
                                comments[comments.length] = element;
                            } else if(element.childNodes.length>0)
                                {
                                    for (var i = 0; i<element.childNodes.length; i++)
                                    {
                                        comments = comments.concat(findComment(element.childNodes[i]));
                                    }
                                }
                            return comments;
                    }

//window.onload = countListItems;
//window.onload = countTagItems;
//window.onload = getElements;
var olElement = document.getElementById("everything");//this is the id for my body element
window.onload = alert(findComment(olElement));
            </script>
        </head>
        <body>
            <div id="everything">
            <h1>Things to Do</h1><!--this is a title-->
            <ol id="toDoList"><!--this is a list-->
                <li>Mow the lawn</li><!--this is a list item-->
                <li>Clean the windows</li>
                <li>Answer your email</li>
            </ol>
            <p id="toDoNotes">Make sure all these things are done so you can get some rest.</p>
            </div>
        </body>
    </html>

简单的一页
var comments=新数组();
函数findComment(元素)
{ 
if(element.nodeType==8)
{
注释[comments.length]=元素;
}else if(element.childNodes.length>0)
{
对于(var i=0;i

如果
findComment
不返回任何内容,并且没有任何参数,那么这将不起作用:
comments.concat(findComment(oleelement.childNodes[i]))
。它将计算为
comments.concat(未定义)
。您的代码具有硬编码的ID,而不是使用传入的参数。您的代码始终查找相同的ID,然后查找其子项。无限次每次从for循环调用
findComment
方法时,您都会从
everything
节点开始搜索。函数应该具有从childnodes您似乎仍然忘记了在
findComments()
函数中返回
注释。