首页 > JS用递归实现jquery的后代选择器

JS用递归实现jquery的后代选择器

初学递归..我想实现最简单的jq后代选择器,为什么总是报错递归溢出啊

我想通过$(ul li a)这样的形式实现获取到所有ul,li下面的<a>标签,不考虑其他问题

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        * {padding: 0;margin:0; } ul {background-color: #999; } li {list-style-type: none; }
     </style>
</head>
<body>
    <ul class="text two">
        <li><a href="###">text1</a></li>
        <li><a href="###">text2</a></li>
    </ul>
</body>
</html>
function $( para ) {
            //selecterBox 用来存储输入的各个选择器,每一个数组元素都是一个选择器
            var selecterBox = para.split(' ');
            var j = 0;
            var i = 1;
            var getTag = function (j) {
                if ( selecterBox.length == 1 ) {
                    return document.getElementsByTagName( selecterBox[j] );
                } else {
                    j++;
                    if( j==0 ){
                        return document.getElementsByTagName( selecterBox[j] );
                    }else if ( j>0 && j<=selecterBox.length ) {
                        return getTag(j-1)[0].getElementsByTagName( selecterBox[j] );
                    } else {
                        return getTag(j)[0].getElementsByTagName( selecterBox[selecterBox.length-1] );
                    }
                }
            }
            return getTag(j);
        }

        //测试
        $("ul li")[0].style.backgroundColor = "#f00";

错误信息:Uncaught RangeError: Maximum call stack size exceeded


getElementsByTagName() 会取得文档中所有 TagName 匹配的节点,而不只是第一层节点。

似乎应该用 .children.filter(function) 来获取

【热门文章】
【热门文章】