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

时间:2011-01-28 04:47:20

标签: jquery recursion

我正在寻找遍历我使用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:第一个孩子但停在那里给我jQuery错误'Uncaught Syntax error,unrecognized expression:[object Object]'

我假设我混淆了jQuery和JavaScript元素,但似乎无法确切地知道问题是什么。

我是JavaScript / jQuery的新手,我们非常感谢任何帮助或其他基本指针。感谢。

1 个答案:

答案 0 :(得分:2)

函数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元素对象。

希望有所帮助:)