2012-11-29 60 views
1

我试过了一个自定义的getElementById()方法来从HTML页面中检索DOM元素。这是定义。自定义javascript document.getElementById()方法?

document.customGetElById = function(passedId){ 
    var nodeFound = null; 
    recursive = function(nodes) 
    { 
     for(var i =0 ; i< nodes.length; i++) 
     { 
      if(nodes[i].nodeType == 1) //element nodes 
      { 
       //console.log(nodes[i].id); //only element nodes have id's 
       if(nodes[i].id == passedId) 
       { 
        //console.log(nodes[i]); 
        nodeFound = nodes[i]; 
        return; 
       } 
       if(nodes[i].childNodes) 
       { 
        //console.log('there are child nodes inside it'); 
        recursive(nodes[i].childNodes); 
       } 
      } 
     } 
    } 
    recursive(document.body.childNodes); 
    return nodeFound; 
}; 

这是一个正确的方法吗?这对性能有好处吗? 重写本机getElementById()方法无关紧要。原生函数是如何编写的?有人可以帮我吗? 在此先感谢。

+0

分离你的代码和文本部分 – polin

+1

无论如何,本机的问题是什么? – Joseph

+0

头上的元素也有ids。 – Musa

回答

2

原生函数不是用JS编写的,所以任何JS方法都必须与原始的getElementById不同。

你的函数也可能效率低于浏览器的实现,因为你所做的只是从其他本地函数中复制它。

+1

特别考虑到任何实现性能的人都会将id->元素映射存储在散列表中,或者在它看到它们时将其存储,以便稍后查找接近恒定的时间。没有做同样的事情,JS功能是不可能的。这种递归查找OP确实无法帮助性能。 :P – cHao