2016-09-24 1 views
0

Я пытаюсь повторно реализовать функцию getElementsByClassName. В рамках моей функции я хочу рекурсивно вызывать свою функцию на дочерних элементах элемента с его дочерними узлами.как-то не может передать значение функции, ведущей к типуError

Однако, несмотря на ведение журнала консоли, что я передаю значение w/дочерние узлы в функцию, когда я консоль регистрирую элемент сразу после того, как я его рекурсивно вызвал, он говорит, что мой элемент не определен, и поэтому он терпит неудачу, когда я спрашиваю для получения его дочерних узлов.

Вот мой код.

var getElementsByClassName = function(className) { 
    var results = []; 
    function inner(element) { 
    console.log(element); //eventually says undefined unexpectedly 
    var children = element.childNodes; 
    console.log(Array.isArray(children)); 
    for (var i = 0; i < children.length; i++){ 
    console.log("the class list is: ", children[i].classList); 
    if (children[i].classList !== undefined){ 
     if (children[i].classList.value === className) { 
     results.push(children[i]); 
     } 
    } 
    console.log("the child nodes are: ", children[i].childNodes); 
    if (children[i].childNodes.length !== 0){ 
     console.log("the one that's supposed to have child nodes is", children[i]); //lists an element w/ child nodes 
     return inner(document[children[i]]); 
     } 
    } 
    return results; 
    } 
    return inner(document.body); 
}; 

console.log(getElementsByClassName("targetClassName")); 
console.log(document.getElementsByClassName("targetClassName")) 

ответ

0

вы имеете в виду документ как объект с свойством элемента DIV, но он может не обладает таким свойством

return inner(document[children[i]]); 

должен быть

return inner(children[i]); 
+0

Это не сработало. Дала мне ошибку Uncaught SyntaxError: missing) после списка аргументов. Все же скобки в '' 'return inner (children [i]]),' '' правильны – MattGoldwater

Смежные вопросы