用于导航列表的递归JQuery函数

用于导航列表的递归JQuery函数,jquery,recursion,Jquery,Recursion,我希望遍历使用ul元素创建的树。我意识到使用适当的选择器可以更容易地完成这项工作,但我想创建一个递归函数来完成这项工作 我们的想法是向下移动树并打开所有子列表,同时将类“on”添加到li:first-child元素以打开列表并高亮显示每个列表中的第一个项目。以下是我的做法: function showAllFirstDiv(topnav) { $(topnav).show(); $(topnav + ' > li:first').addClass('on'); if

我希望遍历使用ul元素创建的树。我意识到使用适当的选择器可以更容易地完成这项工作,但我想创建一个递归函数来完成这项工作

我们的想法是向下移动树并打开所有子列表,同时将类“on”添加到li:first-child元素以打开列表并高亮显示每个列表中的第一个项目。以下是我的做法:

function showAllFirstDiv(topnav) {
    $(topnav).show();
    $(topnav + ' > li:first').addClass('on');
    if ($(topnav + ' > li:first > ul:first').length)
    {
        var childUL = $(topnav + ' > li:first > ul:first');
        showAllFirstDiv(childUL);
    }   
    else
    return true;
}
我打电话给:

showAllFirstDiv('.top');
它打开.top ul和第一个子ul(.top>li>ul)并打开.top>li:first child,但在那里停止,给出jQuery错误“未捕获语法错误,无法识别的表达式:[object]”

我假设我混淆了jQuery和JavaScript元素,但似乎无法准确地找出问题所在


我是JavaScript/jQuery新手,非常感谢您的帮助或其他基本指导。谢谢。

函数
showAllFirstDiv()
需要一个字符串,然后该字符串将用作jQuery对象的选择器

传递给函数的
childUL
变量实际上是一个jQuery对象

要解决此问题,请执行以下操作:

function showAllFirstDiv(topnav) {
    $(topnav).show();
    $(topnav + ' > li:first').addClass('on');
    if ($(topnav + ' > li:first > ul:first').length)
    {
        var childUL = topnav + ' > li:first > ul:first';
        showAllFirstDiv(childUL);
    }   
    else
    return true;
}
注意,
childUL
现在是一个字符串(成为选择器),而不是DOM元素对象

希望有帮助:)