@olya_097

Вопрос про полифиллы, для чего тут this(на что ссылается?) и null, а while (node) -значит бесконечный цикл?

1 вопрос
----------
(function() {

  // проверяем поддержку
  if (!Element.prototype.closest) {

    // реализуем
    Element.prototype.closest = function(css) {
      var node = this;

      while (node) {
        if (node.matches(css)) return node;
        else node = node.parentElement;
      }
      return null;
    };
  }

})();

2 вопрос
-----------
Есть существенная разница в этих строках? они с разних полифиллов
5af0872c1df36939213932.png
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
var node = this; // в ноду кладем текущий элемент Element;
// начинаем примерять селектор, двигаясь от текущего элемента к его родителям     
 while (node) // пока есть элемент (не null) (или на предыдущей итерации провалили матч и есть родитель)
 {
        if (node.matches(css)) // подходит селектор элементу ?
         return node; // возвращаем этот элемент, цикл останавливается
        else
         node = node.parentElement; // не подошло, устанавливаем на node родительский элемент, идем на следующую итерацию.
      }
return null; // цикл прошелся по всем родителям - ничего не нашли

----------
Подставляем свой "велосипед" closest в прототип элемента:
Element.prototype.closest = function (css)
-------------
Подставляем в прототип элемента метод matches любую доступную из перечисленных через || реализацию, если этот метод в разных браузерах называется по-разному, чтобы сгладить этот досадное недоразумение.
Element.prototype.matches = Element.prototype.matchesSelector || <подставьте любой метод, чтобы делал матч, но назывался не как у всех>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы