好吧,我正在编写自己的getElementByClassName,这是我的问题:
function getElementByClassName(elemento,clase){
var i = 0;
if(elemento.hasChildNodes()){
while(elemento.childNodes[i]){
if(elemento.childNodes[i].nodeType != 3){
if(elemento.childNodes[i].className == clase){
return elemento.childNodes[i]; // <---- This is my problem, change to alert
}
else {
getElementByClassName(elemento.childNodes[i],clase);
}
}
i++
}
}
}
var div = getElementByClassName(document.body,"foo");
alert(div);
它警告未定义,但是如果我把(在函数中)警告此警报[objectHTMLDivElement]并且未定义,那么为什么如果这识别出具有警报的[objectHTMLDivElement],则返回undefined?
答案 0 :(得分:0)
要回答你的问题,你的实现不起作用的原因是因为你在else
子句中递归调用你的函数而对返回值什么都不做。这就是你的代码找到对象的原因,但它永远不会被返回。
这是您的稍微改写的版本,但您的方法还有其他限制,一个是找不到多个类的元素(即不会返回<div class="foo bar">
)。除非您只是将此作为一项学习练习,否则我建议您使用现有的实施方案,例如Yoni的答案中的链接。
function getElementByClassName(elemento, clase)
{
var i = 0;
if (elemento.hasChildNodes())
{
while (elemento.childNodes[i])
{
if (elemento.childNodes[i].nodeType != 3)
{
if (elemento.childNodes[i].className == clase)
return elemento.childNodes[i];
else
{
var result = getElementByClassName(elemento.childNodes[i], clase);
if (result != null)
return result;
}
}
i++;
}
}
return null;
}