0

简短的问题: http: //jsfiddle.net/wF4FH/2/ 我想要的是在我更改课程之前,Page1 位于 Page2 上方,Page10 位于第 20 页上方。这应该适用于任意数量的元素。

提供的代码给出了“未捕获的类型错误:对象 # 没有方法 'append'”。

长问题: 我在找到基于第一个链接插入 li 元素的正确方法时遇到问题。问题是我不能在我的标记上使用 id,所以我必须“遍历”每个类并检查名称。我可能会让这比现在复杂得多,因为我的前两个解决方案没有按照我想象的方式工作。

html

<ul class="nav">
<li class="active">
    <a href="/">Start</a>
</li>
<li class="has-child">
    <a href="/page1">page1</a>
    <ul class="">
        <li>
            <a href="/page1/page2">page2</a>
        </li>
    </ul>
</li>
<li class="has-child">
<a href="/page10">page10</a>
<ul class="">
    <li>
        <a href="/page10/page20">page20</a>
    </li>
    <li>
        <a href="/page10/page30">page30</a>
    </li>
</ul>
</li>

javascript

 //Copy first link to child ul li 
    var pageLinks = $("li.has-child > a:first-child");
    if (pageLinks != null) {
        //var dropdownMenus = $("li.dropdown  > a:first-child");
        for (var i = 0; i < pageLinks.length; i++) {
            for (var x = 0; x < pageLinks.length; x++) {
                if (pageLinks[i].innerHTML === pageLinks[x].innerHTML) {
                    pageLinks[x].childNodes.append(pageLinks[i]);
                }
            }
        }
    }

    //Change css classes
    $("li.has-child").attr('class', 'dropdown');
    $(".dropdown ul").addClass("dropdown-menu");
    $(".dropdown a").attr("href", "#").addClass("dropdown-toggle").attr('data-toggle', 'dropdown');

strong text 我想要的是在我更改课程之前,Page1 位于 Page2 上方,Page10 位于第 20 页上方。这应该适用于任意数量的元素。

当它们被复制到内部 ul 时,我将顶级菜单项更改为不同的类,以作为可单击的下拉菜单项。

提供的代码给出了“未捕获的类型错误:对象 # 没有方法 'append'”。

这是我无法更改标记的 cms 的导航。

4

2 回答 2

0

当您有一个 jQuery 对象并通过数字索引访问它时,您会得到一个 HTML 元素。所以$('body')[0] == document.body。这意味着当你访问时pageLinks[x],你真的得到了一个原始元素。这意味着你想要pageLinks[x].appendChild(pageLinks[i]);,而不是pageLinks[x].childNodes.append(pageLinks[i]);

于 2013-07-26T20:48:48.053 回答
0

尝试这个:

$links = $('li.has-child').children('a:first-child');
if($links.length > 0){
    $links.each(function(i,link){
        $(link).next().prepend($('<li></li>').append($(link)))
    })
} 

http://jsfiddle.net/wF4FH/6/

您需要 .clone() 方法来复制元素..

更新

$links = $('li.has-child').children('a:first-child');
if($links.length > 0){
    $links.each(function(i,link){
        $(link).next().prepend($('<li></li>').append($(link).clone()))
    })
}

http://jsfiddle.net/wF4FH/7/

于 2013-07-26T21:56:21.413 回答