遍历DOM精简实现
下面用比较精简的代码实现遍历DOM树节点
function travel(node, fn){ var next = node.firstChild; while ((node = next)) { fn && fn(node); next = node.firstChild || node.nextSibling; while (!next && (node = node.parentNode)){ next = node.nextSibling; } } } //打印出所有的p标签 travel(document.body, function(node){ if(node.nodeName.toLowerCase() == 'p'){ console.log(p); } }); //模拟getElementsByTagName function getElementsByTagName(node, tagName){ var i = 0, result, elements = [], everyTag = !tagName || (tagName === '*');
!everyTag && (tagName = tagName.toLowerCase()); travel(node, function(node){ if(node.nodeType === 1 && everyTag || node.nodeName.toLowerCase() === tagName){ elements[i++] = node; } });
result = elements.slice(0);//拷贝一份 elements = null;//因travel函数形成一个闭包引用到elements,所以应该将elements设置为null,防止内存泄露 return result; }
posted on 2013-10-12 22:35 shiny_bender 阅读(258) 评论(0) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步