Internet Explorer上的JavaScript Tree问题

时间:2014-02-03 13:22:07

标签: javascript jquery internet-explorer

我的JavaScript需要一些帮助。我的JavaScript代码不能在Internet Explorer 8上运行,它会在控制台上显示空白显示和一些错误代码,请为我提供一些解决方案,以便在Internet Explorer上使用此JavaScript代码。以下是小提琴的链接:

Fiddle


错误代码

SCRIPT438:对象不支持属性或方法'keys'    文件:treelist.js,行:12,专栏:13


var dataSource = {
            "Watch": {
                "Titan": {},
                "parent": {
                    "leaf1": {},
                    "leaf2": {}
                },
            }
        },
    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(e) {
                var classNames = e.currentTarget.className;
                if (classNames.indexOf("hidden") == -1) {
                    e.currentTarget.className += "hidden";
                } else {
                    e.currentTarget.className = e.currentTarget.className.replace("hidden", "");
                }
                e.stopPropagation();
            }

            if (typeof obj[prop] == "object" && Object.keys(obj[prop]).length) {
                li.appendChild(traverseObject(obj[prop]));
            } else {
                li.className += "leaf";
            }
            ul.appendChild(li);
            console.log(ul);
        }
        return ul;
    };


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

1 个答案:

答案 0 :(得分:1)

您的代码使用Object.keys(),Internet Explorer 8不支持该版本(IE9中引入了支持)。 MDN has more information,包括您可以用来修复问题的填充物。只需将其粘贴到相关的Javascript文件中即可。

正如Zach L所指出的,您的代码也使用了e.stopPropogation()。这也是IE8不支持的(再次,它是在IE9中引入的)。您可以使用MDN has more informationJonathan T. Neal has a polyfill来解决问题(这是文章末尾的addEventListener代码)。再次,只需将其粘贴。