2015-12-29 5 views
2

Я пытаюсь реализовать функцию getElementsByClassName, которая ведет себя точно так же, как метод DOM. Через много исследований я придумал следующее, но кажется, что возвращаемое не соответствует возврату стандартного метода. Последний оператор console.log, похоже, печатает то, что я ищу, но каким-то образом возвращается. Любые предложения или помощь будут очень благодарны!getElementsByClassName recursion

var getElementsByClassName = function(className){ 
    var results= []; 
    var bod = document.body; 
    var iterateBod = function(bod){ 

    if(bod.classList && bod.classList.contains(className)){ 
     results.push(bod); 
     console.log(results) 
    }else{ 
     for(var i = 0; i < bod.childNodes.length; i++){ 
      iterateBod(bod.childNodes[i]); 
     } 
    } 
    }; 

iterateBod(bod); 
console.log(results); 
return results; 
}; 
+1

почему вы остановить итерацию, если объект имеет класс соответствия? – Sebas

ответ

0

изменить состояние внутри рекурсии

var getElementsByClassName = function(className){ 
var results= []; 
var bod = document.body; 
    var iterateBod = function(bod){ 
    if(bod.classList && bod.classList.contains(className)) 
    { 
    results.push(bod); 
    console.log(results); 
    if(bod.childNodes) 
    { 
     for(var i = 0; i < bod.childNodes.length; i++) 
     { 
      iterateBod(bod.childNodes[i]); 
     } 
    } 
    } 
}; 

iterateBod(bod); 
console.log(results); 
return results; 
}; 
+0

Это сделало трюк, но я все еще мрачен в своем понимании, почему это сработало. Не могли бы вы объяснить и объяснить, что это делает по сравнению с моей первоначальной попыткой? Я хочу убедиться, что у меня есть сильное понимание концепции. – DLF85

+0

Функция по умолчанию не останавливает рекурсию внутри DOM после обнаружения класса. Уже был комментарий Себаса. Я просто модифицирую свой код. – Anbarasan