Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.10.2019, 05:44
Интересующийся
Отправить личное сообщение для Aruta Посмотреть профиль Найти все сообщения от Aruta
 
Регистрация: 08.07.2019
Сообщений: 15

Полифил closest
Нашел полифил для closest. Но я тупой наверное он не хочет работать.
Пробовал вставлять через ссылку <script src="https://cdn.polyfill.io/v2/polyfill.js?features=Element.prototype.closest"></script>
- тоже не работает.

(function(e){
  e.closest = e.closest || function(css){
    var node = this;

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

if (!Element.prototype.matches) {
  Element.prototype.matches =
    Element.prototype.matchesSelector ||
    Element.prototype.mozMatchesSelector ||
    Element.prototype.msMatchesSelector ||
    Element.prototype.oMatchesSelector ||
    Element.prototype.webkitMatchesSelector ||
    function(s) {
      var matches = (this.document || this.ownerDocument).querySelectorAll(s),
        i = matches.length;
      while (--i >= 0 && matches.item(i) !== this) {}
      return i > -1;
    };
}


У меня есть скрипт
let descList = document.querySelectorAll('.upsale__block__bot-right__title-wrap');
	descList.forEach(function(descF) {
	descF.onclick = function viewblock(){  //кнопка/блок, по которой нажимаем
		let listF = this.closest('.upsale__block__sub-right-wrap'); 
		let descshow = listF.children[1]; //выбор блока, который нужно скрыть/показать
		let arrow = this.querySelector('.arrow_up');		
		if (descshow.classList == "dflex"){
			arrow.classList.toggle("");
			listTestF.classList.toggle("dnone");  //удаляем класс
		} else {
			descshow.classList.toggle("dnone");  //удаляем класс
			arrow.classList.toggle("arrow-down");
		}		
	};
});


На сколько я понял, то надо Element поменять на класс блока, который отслеживается, но полифил раньше добавляется и он не видит переменную для нужных блоков.

Подскажите, пожалуйста, почему не хочет работать с моим скриптом указанный выше полифил?

Последний раз редактировалось Aruta, 10.10.2019 в 07:09.
Ответить с цитированием
  #2 (permalink)  
Старый 10.10.2019, 07:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,830

Aruta,
если вам нужен closest, значит нужен и matches два этих полифила работают в паре, добавить в начало страницы matches , затем closest и ничего не менять в них, потом ваши блоки и только потом ваш скрипт.
не заработает делайте макет.
Ответить с цитированием
  #3 (permalink)  
Старый 10.10.2019, 07:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,830

Aruta,
на всякий случай
<script src="https://polyfill.io/v3/polyfill.js?features=Element.prototype.closest%2CElement.prototype.matches"></script>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
полифил для метод closest в internet explorer Sevic Internet Explorer 2 09.08.2018 10:46
Некоректный полифил indexOf. Pluton Общие вопросы Javascript 1 10.12.2017 23:09
Полифил для распознавания размеров в процентах AlexKain Мобильный JavaScript 2 14.12.2016 09:15
Полифил querySelector[All] для IE8 FINoM Общие вопросы Javascript 7 29.08.2014 17:13
Метод closest any.zicky jQuery 0 17.09.2012 12:55