0

簡単な質問: http://jsfiddle.net/wF4FH/2/ クラスを変更する前に、Page1 を Page2 のすぐ上に、Page10 を Page 20 のすぐ上に配置する必要があります。これは、任意の数の要素に対して機能するはずです。

提供されたコードは、「Uncaught TypeError: Object # has no method 'append'」を返します。

長い質問: 最初のリンクに基づいて li 要素を挿入する正しい方法を見つけるのに問題があります。問題は、マークアップでIDを使用できないため、各クラスを「ウォークスルー」して名前を確認する必要があることです。最初の 2 つの解決策が思ったように機能しなかったため、これを実際よりもはるかに複雑にする可能性があります。

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 を Page 20 のすぐ上に配置する必要があります。これは、任意の数の要素に対して機能するはずです。

それらが内部 ul にコピーされたら、最上位のメニュー項目を別のクラスに変更して、クリック可能なドロップダウン メニュー項目として機能させます。

提供されたコードは、「Uncaught TypeError: Object # has no method 'append'」を返します。

マークアップを変更できないCMSのナビゲーションです。

4

2 に答える 2

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 に答える