Skip to content

(腾讯面试)js遍历页面输出dom数量

2010年4月26日

昨天去参加了腾讯的面试,面试官现场出了一道题,要求用JS统计页面的DOM数量。

现场写了一下,但是由于对JS原生DOM操作不基了了,具体的结点操作不会写,只好留了个大致思路。

晚上回到宿舍,终于写出来了。

javascript
var domcount=0;
function domsearch(domobj)
{
if(domobj.firstChild)
	{
		var tempdom=domobj.firstChild;
		do{
			domsearch(tempdom);
			tempdom=tempdom.nextSibling;
		}while(tempdom);
	};
	if(domobj.nodeType==1)
	{
		domcount++;
	}
}
domsearch(document.getElementsByTagName('html')[0]);
alert(domcount);
var domcount=0;
function domsearch(domobj)
{
if(domobj.firstChild)
	{
		var tempdom=domobj.firstChild;
		do{
			domsearch(tempdom);
			tempdom=tempdom.nextSibling;
		}while(tempdom);
	};
	if(domobj.nodeType==1)
	{
		domcount++;
	}
}
domsearch(document.getElementsByTagName('html')[0]);
alert(domcount);

这个遍历过程实际上是用的树的孩子兄弟表示法,直接用孩子结点,得到以下代码:

var domcount=0;
function domsearch(domobj)
{
	if(domobj.hasChildNodes)
		for(var i=0;i<domobj.childNodes.length;i++)
		{
			domsearch(domobj.childNodes[i]);
		};
	if(domobj.nodeType==1)
	{
		domcount++;
	}
}
domsearch(document.getElementsByTagName(&apos;html&apos;)[0]);
alert(domcount);
var domcount=0;
function domsearch(domobj)
{
	if(domobj.hasChildNodes)
		for(var i=0;i<domobj.childNodes.length;i++)
		{
			domsearch(domobj.childNodes[i]);
		};
	if(domobj.nodeType==1)
	{
		domcount++;
	}
}
domsearch(document.getElementsByTagName(&apos;html&apos;)[0]);
alert(domcount);

感想:基础知识还是要扎实才行,整个面试过程都没有问很虚无飘渺的东西,都是很基础很实在的知识。JS的具体函数可以记不住,但是一定要知道它能做些什么。回来查资料了才知道JS对DOM结点的原生操作是怎样的。另外,DOM编程的电子书在我电脑里好久了,很少去翻,罪过。