Наверное можно и без сравнения с null, ведь условие преобразуется в логический тип, а null в js преобразуется в false:
if (element.previousSibling) {
// ... остальной код Дмитрия Дерепко
}
// Или без вложенных циклов
// сначала проверить: если у элемента нет предшествующего элемента
if (!element.previousSibling) {
return element;
// вернуть элемент, чтобы другая функция что-то с ним могла сделать.
// Или вернуть false, не суть. Важно просто обработать сценарий, когда элемент
// идет первым в родителе. Можно просто выйти из функции.
}
// Дальше, если предшественник есть, делаем как в коде Дмитрия
const targetTags = ['h1', 'h2', ...],
lowerName = element.previousSibling.nodeName.toLowerCase();
if (!targetTags.includes(lowerName)) {
// do samething
}
// Кстати, можно targetTags передавать сразу аргументом в функцию, чтобы код был чуть
// более универсальным.
function doSomethingEpic(element, targetTargs) {
// code
}
const someElem = document.querySelector('.epicElement');
const tags = ['h1', 'h2', ...],
doSomethingEpic(someElement, tags);
Важно: метод includes не поддерживается в IE,
полифилл есть на сайте MDN