2016-09-24 19 views
0

我試圖重新實現函數getElementsByClassName。作爲我的函數的一部分,我想遞歸調用我的函數在元素的子元素/自己的子節點上。不知何故無法將值傳遞給導致typeError的函數

儘管在控制檯日誌記錄中,我將一個具有子節點的值傳遞給該函數,但當我在遞歸調用它的控制檯後立即記錄元素時,它說我的元素是未定義的,因此在我問獲取其子節點。

這是我的代碼。

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)。然而'''中的圓括號返回inner(children [i]]);'''是正確的 – MattGoldwater

相關問題