Можно ли исключить "el &&" из условия for? - PullRequest
1 голос
/ 12 января 2020
function parents(element, selector) {
  for (let el = element; el && el !== document; el = el.parentNode) {
    if (el.matches(selector)) {
      return el;
    }
  }
  return null;
}
parents(anyChild, '#inexistent');

Есть ли в реальной ситуации ситуация, когда потребуется el &&, или я могу оставить только часть el !== document?

Я не могу думать ни о чем, кроме случаев, когда я не передать элемент или я передал недопустимый.

1 Ответ

2 голосов
/ 12 января 2020

Если что-то вызывает parents с допустимым элементом, которого нет в DOM, это условие необходимо для предотвращения ошибки.

Рассмотрим:

const div = document.createElement("div");
div.innerHTML = "<span><span class='foo'></span></span>";
const span = div.querySelector(".foo");
// ...
const blah = parents(span, ".blah");

parentNode достигнет null, даже не будучи сначала === document. Аналогично:

const div = document.getElementById(".something");
div.remove(); // Or on older browsers: div.parentNode.removeChild(div);
const blah = parents(div, ".blah");

Примечание: у вас есть метод closest. Вы можете использовать это вместо хорошего полифилла, если вам нужно поддерживать устаревшие браузеры.

...