JavaScript递归函数帮助删除连字符

JavaScript recursive function help to remove hyphens

本文关键字:连字符 删除 帮助 递归函数 JavaScript      更新时间:2023-09-26

我一直在编写一个递归脚本,它可以根据标记动态创建一个下拉导航。

这是我到目前为止所拥有的,但我试图删除下拉列表中每个项目之前的连字符,除非它在嵌套的子链接中。有人有什么想法吗?

下面是如何设置递归脚本的,调用位于底部。

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/

选择导航

跟踪当前水平:

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/

您可以在runLinks函数中添加一个额外的参数,这样它就可以知道当前的前置字符和子链接的前置字符。

  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, '', '- ');