javascript - JS用递归实现jquery的后代选择器
巴扎黑
巴扎黑 2017-04-10 17:05:02
[JavaScript讨论组]

初学递归..我想实现最简单的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

巴扎黑
巴扎黑

全部回复(2)
怪我咯

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

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

ringa_lee

你好 楼主 你的问题解决了吗 我现在在写一个选择器 写后代的时候 有点疑问 能一起交流一下吗

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号