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