Javascript в Magento 1.9.3.8. Добавьте id к элементу, если body содержит определенный класс, а id элемента содержит класс

1

Следующий код присваивает классу "активный" элементу с id = "39". Это произойдет, если будут выполнены два условия: 1) что в корпусе содержатся "гостиничные магазины" в своем классе -so, класс кузова может представлять собой гостиничные магазины, гостиничные магазины-1, гостиничные магазины-2, гостиничные магазины -3 и т.д. - и 2) что элемент с id = "выпадающим меню" будет содержать класс "active".

Тем не менее, код не работает. Есть ли у вас идеи, где ошибки, или почему этот код не работает? Любая помощь будет оценена по достоинству.

if ( ($('body[class*="hotel-stores"]').length > 0)  && ( $( "#dropdown-menu" ).is( ".active" ) ))  {
   var el = document.getElementById("39");
   el.classList.add("active");
}

Этот второй способ, похоже, работает очень хорошо, но только тогда, когда класс кузова - это "гостиничные магазины":

if (document.body.classList.contains('hotel-stores')) {
    var el = $(document.getElementById("39"));
    el.addClassName("active");
}
  • 0
    При условии, что элементы существуют и имеют эти классы по состоянию на момент запуска этого кода, он работает: jsfiddle.net/ugtv8uL0 Пожалуйста, обновите ваш вопрос минимальным воспроизводимым примером, демонстрирующим проблему, в идеале - запускаемым с использованием фрагментов стека ( [<>] кнопка на панели инструментов, вот как это сделать ).
  • 0
    Привет, ТиДжей. Я проверил это, и появилось упоминание: Uncaught TypeError: Невозможно прочитать свойство 'length' из null в гостиничных магазинах; вероятно, это проблема, по которой он не работает. Как это исправить?
Теги:
magento-1.9.3

1 ответ

0

В комментарии, который вы сказали

Uncaught TypeError: Невозможно прочитать длину свойства "null" в гостиничных магазинах

Это говорит мне, что $ в этом коде не является jQuery, как я предполагал, но какая-то другая библиотека, возможно, PrototypeJS дала ему сайт Magento.

Если вы также загрузили jQuery, просто измените все $ to jQuery и он должен работать.

Если вы не загружаете jQuery, вы можете сделать то же самое с PrototypeJS, немного иначе, потому что PrototypeJS не настроен на основе, как jQuery:

if (document.body.className.indexOf('hotel-stores') !== -1 && $$("#dropdown-menu.active").length) {
   var el = $(document.getElementById("39"));
   el.addClassName("active");
}
  • 0
    Привет, TJ. Uncaught TypeError больше не видно, но элемент с id = "39" еще не получает class = "active"; у вас есть еще советы?
  • 0
    @Eduardo: приведенный выше код работает с PrototypeJS, поэтому, если вы не видите добавленный класс, то в любом body нет соответствующего класса, #dropdown-menu нет соответствующего класса, вы неправильно скопировали код, или ваша страница не использует PrototypeJS.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню