0

私は、マークアップに基づいてドロップダウン ナビゲーションを動的に作成する再帰スクリプトに取り組んできました。

これが私がこれまでに持っているものですが、サブリンクとしてネストされている場合を除き、ドロップダウン リストの各項目の前にあるハイフンを削除しようとしています。誰にもアイデアはありますか?

再帰スクリプトのセットアップ方法を次に示します。呼び出しは一番下にあります。

var loadLinks = function runLinks(currDom, currPrependedChar) {

        var dom = currDom;
        var children = dom.children;

        for (var i = 0; i < dom.children.length; ++i) {

            var currentLink = children[i];

            switch (currentLink.nodeName) {
                case 'A':
                    var option = document.createElement('option');
                    option.innerHTML = currPrependedChar + currentLink.text;
                    option.value = currentLink.href;
                    select.appendChild(option);
                    break;
                default:
                    if (currentLink.nodeName === 'UL') {
                        currPrependedChar += currPrependedChar;
                    }
                    loadLinks(currentLink, currPrependedChar);
                    break;
            }
        }
    }

    loadLinks(nav, '- ');

これがJSFiddleでどのように実行されるかです。ハイフン付きの選択ナビゲーションを見ることができます - http://jsfiddle.net/4jeaZ/

4

2 に答える 2

1

現在のレベルを追跡するだけです。

var loadLinks = function runLinks(currDom,currPrependedChar, currLevel) {
...
option.innerHTML = (currLevel++ < 1 ? '' : currPrependedChar) + currentLink.text;
...
currLevel < 2 || (currPrependedChar += currPrependedChar);
...
loadLinks(currentLink, currPrependedChar, currLevel);
...
loadLinks(nav, '- ', 0);

http://jsfiddle.net/userdude/4jeaZ/5/

于 2012-12-30T21:39:23.677 に答える
0

runLinks関数に1つのパラメーターを追加して、現在の先頭に追加された文字とサブリンクに追加された文字を認識できるようにすることができます。

  var loadLinks = function runLinks(currDom, currPrependedChar, subPrependedChar) {

        var dom = currDom;
        var children = dom.children;

        for (var i = 0; i < dom.children.length; ++i) {

            var currentLink = children[i];

            switch (currentLink.nodeName) {
                case 'A':
                    var option = document.createElement('option');
                    option.innerHTML = currPrependedChar + currentLink.text;
                    option.value = currentLink.href;
                    select.appendChild(option);
                    break;
                default:
                    if (currentLink.nodeName === 'UL') {
                        currPrependedChar += subPrependedChar;
                    }
                    loadLinks(currentLink, currPrependedChar, subPrependedChar);
                    break;
            }
        }
    }

    loadLinks(nav, '', '- ');
于 2012-12-30T21:21:13.737 に答える