2016-11-03 3 views
0

У меня есть метод findParentByClassName, который смотрит вверх для определенного родительского класса. Он работал хорошо, но теперь я пытаюсь вернуть два предупреждения, если 1) parentClass этого имени не найдено. 2) у него нет родителя. Это то, что у меня есть до сих пор, но похоже, что он не работает должным образом.У меня нет родительского или родительского класса

var findParentByClassName = function(element, targetClass) { 
    if (element.parentElement) { 
     var currentParent = element.parentElement; 
     while (currentParent.className != targetClass && currentParent.className !== null) { 
      currentParent = currentParent.parentElement; 
     } 
     if (currentParent === targetClass) ? return currentParent : alert("No parent found with that class name"); 
    } else { 
     alert("No Parent Element") 
    } 
}; 
+0

у вас есть какие-либо ошибки в консоли инструментов для разработчиков? - как «ожидаемое выражение, получило»? » –

+0

, за исключением синтаксической ошибки, ваша функция не должна возвращать значения и оповещения одновременно –

ответ

0

Лично я заменял бы предупреждения с исключениями или возвращал undefined/null и использовал свойство classList.

Но вот ваш код преобразуется в работу.

Ваша проблема заключалась в недействительном использовании tenery, и вы также не проверяли, является ли currentParent нулевым.

Я обновил и добавил findParentByClassName2, который может обрабатывать родителей с несколькими классами и возвращать неопределенные, если они не найдены.

var findParentByClassName = function(element, targetClass) { 
 
    if (element.parentElement) { 
 
     var currentParent = element.parentElement; 
 
     while (currentParent && currentParent.className != targetClass && currentParent.className !== null) { 
 
      currentParent = currentParent.parentElement; 
 
     } 
 
     if (currentParent && (currentParent.className === targetClass)) return currentParent; 
 
     alert("No parent found with that class name"); 
 
    } else { 
 
     alert("No Parent Element") 
 
    } 
 
}; 
 

 
//a modified version, that will also look for parents 
 
//with multiple classes,.. 
 
var findParentByClassName2 = function(element, targetClass) { 
 
    element = element ? element.parentElement : null; //skip self 
 
    while (element) {  
 
    if (element.classList.contains(targetClass)) return element; 
 
    element = element.parentElement; 
 
    } 
 
} 
 

 
var a = document.querySelector('.two'); 
 
console.log(findParentByClassName(a, 'one')); 
 
console.log(findParentByClassName(a, 'invalid')); 
 
console.log(findParentByClassName2(a, 'one')); 
 
console.log(findParentByClassName2(a, 'invalid'));
<div class="one"> 
 
    <div class="two"> 
 
    </div> 
 
</div>

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