2016-11-11 29 views
2

我是js和jquery的新手,需要幫助將我的代碼從jquery重寫爲純js。.each()將屬性添加到父從jquery到js

我有幾個父divs。他們每個人都有一個孩子div裏面。

我想添加一個類到子和父類,但父類作爲數據名稱中的一個屬性值。

的類名存儲在數組中,換言之第一個親本和其子會得到一個數組[0]的類名,第二個親本和其子 - 陣列[1]的類名等

我使用這個jQuery這個

$(".back").each(function(i) { 
    $(this).addClass(tile_array[i]); 
    $(this).parent().attr("data-name", tile_array[i]); 
}); 

我試圖把它改寫在JS是這樣的:

var backs = document.querySelectorAll('back'); 
for (let i = 0; i < backs.length; i++) { 
    for (let j = 0; j < tile_array.length; j++) { 
     backs[i].classList.add(tile_array[j]); 
     backs[i].parentNode.setAttribute("data-name", tile_array[j]); 
    } 
} 

但是,這是行不通的。我應該如何重寫我的代碼才能正常工作?

在此先感謝!

+1

你有一個錯字 - 缺少類選擇在'querySelectorAll(「返回」)' –

+1

除了錯字@RoryMcCrossan指出,我猜你也別並不希望'tile_array'中的所有東西都被應用到每個單獨的「backs」,所以如果你刪除內部循環並使用'tile_array [i]',你應該有1到1的元素映射到數組中的類,不是嗎? – Dymos

+0

您也不需要第二個'for(let j = 0; j Satpal

回答

2

試試這個:backs.lengthtile_array.length是相同的。所以沒必要啊內環

for (let i = 0; i < backs.length; i++) { 
     backs[i].classList.add(tile_array[i]); 
     backs[i].parentNode.setAttribute("data-name", tile_array[i]); 
    } 

querySelectorAll('.back')

0

添加一個類你可以跳過內循環 - 你不在你的jQuery中使用它,你爲什麼要這樣做? :)

此外,要設置data屬性在Javascript中有.dataset元素屬性。所以,你的最終代碼會是這樣:

var backs = document.querySelectorAll('back'); 
for (let i = 0; i < backs.length; i++) { 
    backs[i].classList.add(tile_array[i]); 
    backs[i].parentNode.dataset.name = tile_array[i] 
}