2017-10-04 147 views
0

我想第二個class添加到div如果父母一方有一定class
這是我做過什麼:加入JavaScript類,如果父母有

var h = document.querySelectorAll('h1,h2,h3,h4,p'); //GET ALL ELEMENTS 
for (var i = 0; i < h.length; i++) { // LOOP THROUGH IT AND ADD A CLASS 
    if (h[i].classList.length === 0) { 
     h[i].classList.add("fontFit"); 
    } 
} 

var image_large = document.getElementsByClassName('image_large'); 
var fontFit = document.getElementsByClassName('fontFit'); 

if ($(fontFit).parents().hasClass('image_large')){ //IF `fontFit` has a parent named `image_large`; execute the `for` loop. 
    for (var j = 0; j < image_large.length; j++) { 
     if (fontFit[j].classList.length === 1) { 
      fontFit[j].classList.add('addClass'); 
     } 
    } 
} 

它沒有把我一個錯誤,但我不知道爲什麼它不起作用。

+0

請[創建一個最小的,完整的,並且可驗證的示例]包括HTML(https://stackoverflow.com/help/mcve)。 –

+0

爲什麼在遍歷'fontFit' –

+0

@PatrickEvans時,在for循環條件中使用'image_large.length'。好點子。將其更改爲'fontfit'。現在,每個具有'fontFit'類的元素都有一個'addClass'類 – Interactive

回答

0

您的代碼遭受邏輯錯誤。您的代碼似乎認爲,通過首先執行if語句,fontFit中的所有元素將具有image_large類的父級。但事實並非如此,有些人可能有些人可能沒有,你寧願測試循環中

for (var j = 0; j < fontFit.length; j++) { 
    //note uses Element#closest, a more recently added DOM method 
    //if no parent with that class is found null is returned 
    if(fontFit[j].closest('.image_large')){ 
    fontFit[j].classList.add('addClass'); 
    } 
} 

當然,你可以很容易地直接找到fontFit這是image_large兒童類的所有元素通過使用正確的選擇然後就遍歷該集合

var fontFit = document.querySelector('.image_large .fontFit'); 
fontFit.forEach(element=>element.classList.add('addClass')); 
//Or in jQuery since you seem to have it 
$('.image_large .fontFit').addClass('addClass');