【问题标题】:Expand and collapse JavaScript展开和折叠 JavaScript
【发布时间】:2014-02-26 02:02:32
【问题描述】:

我注意到在我的以下 JavaScript 代码中添加展开和折叠的帮助。我想要折叠时的 +(加号)图像和展开时的 -(减号)图像。请帮我编写代码。请查看数据源,如果我点击手表,它将展开并显示手表,当我再次点击手表时,泰坦将消失。

Fiddle

var dataSource = ({
            "Watch": ({
                "Titan": ({}),
            })
        }),
    traverseObject = function (obj) {
        var ul = document.createElement("ul"),
            li;

        for (var prop in obj) {
            li = document.createElement("li");
            li.appendChild(document.createTextNode(prop));
            li.onclick = function(){alert("Hello")}

            if (typeof obj[prop] == "object" && Object.keys(obj[prop]).length) {
                li.appendChild(traverseObject(obj[prop]));

            }
            ul.appendChild(li);
            console.log(ul);
        }
        return ul;
    };


window.onload = function () {
    document.getElementById("dvList1").appendChild(traverseObject(dataSource));
}

【问题讨论】:

  • 你能提供一个小提琴吗?
  • 从这个开头删除每个()var dataSource = ({ "Watch": ({ "Titan": ({}), }) })
  • @user3237973 检查我更新的答案,这也适用于 IE

标签: javascript jquery html list


【解决方案1】:

Live jsFiddle

我已从您的数据源中删除了不必要的括号,并添加了第三层用于测试目的。

除此之外,我把你的onclick改成了

li.onclick = function(e) {
                e.currentTarget.classList.toggle("hidden");
                e.stopPropagation();
            }

并放置一个else 语句,为叶节点添加一个类leaf(我们不想在这些节点上看到减号和加号)。

if (typeof obj[prop] == "object" && Object.keys(obj[prop]).length) {
    li.appendChild(traverseObject(obj[prop]));
} else {
    li.classList.add("leaf");
}

还添加了一些在伪元素中显示标志的 CSS:

ul {
    list-style: none;
}

li.hidden ul {
    display: none;
}

li:before {
    content: '-';
    width: 10px;
    display: inline-block;
}

li.hidden:before {
    content: '+';
}

li.leaf:before {
    content: '';
}

li {
    cursor: pointer;
}

li.leaf {
    cursor: default;
}

编辑:

IE 不支持classList,所以替换为className。这个solution 应该适用于所有浏览器。

【讨论】:

  • 我想你是因为后端请求而得到这个数据源的?如果是这样,那么您应该在服务器上进行排序。但是如果需要在浏览器上排序,可以使用Array.prototype.sort()根据json对象数组对dataSource进行排序
  • 先生,我仍然坚持排序部分,你能不能给我一个 jfiddle
猜你喜欢
  • 2012-05-30
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 2013-06-06
  • 1970-01-01
  • 2012-05-15
相关资源
最近更新 更多