相关疑难解决方法(0)

如何在Javascript中将DOM节点列表转换为数组?

我有一个接受HTML节点列表的Javascript函数,但它需要一个Javascript数组(它运行一些数组方法),我希望它的输出Document.getElementsByTagName返回一个DOM节点列表.

最初我想过使用简单的东西:

Array.prototype.slice.call(list,0)
Run Code Online (Sandbox Code Playgroud)

这在所有浏览器中都可以正常工作,当然除了返回错误"JScript对象预期"的Internet Explorer,因为显然Document.getElement*方法返回的DOM节点列表不是足以成为函数调用目标的JScript对象.

警告:我不介意编写Internet Explorer特定代码,但我不允许使用任何Javascript库,如JQuery,因为我正在编写一个嵌入第三方网站的小部件,我无法加载外部库会给客户造成冲突.

我最后的努力是迭代DOM节点列表并自己创建一个数组,但是有更好的方法吗?

html javascript dom

85
推荐指数
6
解决办法
7万
查看次数

IE只有getElementsByTagName的javascript错误

我有以下代码在FF/Chrome中工作

var stack = [Array.prototype.slice.call(document.getElementsByTagName("body")[0].childNodes)], nodes, node, parent, text, offset;
while (stack.length) {
    nodes = stack.pop();
    for (var i=0, n=nodes.length; i<n; ++i) {
        node = nodes[i];
        switch (node.nodeType) {
            case Node.ELEMENT_NODE:
                if (node.nodeName.toUpperCase() !== "SCRIPT") {
                    stack.push(Array.prototype.slice.call(node.childNodes));
                }
                break;
            case Node.TEXT_NODE:
                text = node.nodeValue;
                offset = text.indexOf("[test=");
                if (offset >= 0 && text.substr(offset).match(/^(\[test=(\d+)\])/)) {
                    parent = node.parentNode;
                    var before = document.createTextNode(text.substr(0, offset));
                        link = document.createElement("a"),
                        after = document.createTextNode(text.substr(offset + RegExp.$1.length));
                    link.appendChild(document.createTextNode(text.substr(offset, RegExp.$1.length)));
                    link.setAttribute("href", "http://example.com/" + RegExp.$2);
                    parent.insertBefore(after, node);
                    parent.insertBefore(link, after); …
Run Code Online (Sandbox Code Playgroud)

javascript internet-explorer

7
推荐指数
1
解决办法
2万
查看次数

标签 统计

javascript ×2

dom ×1

html ×1

internet-explorer ×1