Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.11.2015, 18:27
Аспирант
Отправить личное сообщение для eddin Посмотреть профиль Найти все сообщения от eddin
 
Регистрация: 11.10.2010
Сообщений: 60

Лучшая эмуляция getElementsByClassName для IE8 на ваш взгляд
Добрый вечер!
Собственно весь вопрос в названии темы. В интернетах нашел несколько вариантов, но так как я в JS не очень силен, то не знаю какой вариант более оптимальный. Да и мнения расходятся. А какую реализацию используете вы и (самое главное!) почему именно её?
Ответить с цитированием
  #2 (permalink)  
Старый 26.11.2015, 18:29
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

eddin, getElementsByClassName никогда не использую. Всегда использую эту конструкцию:

document.querySelectorAll('.className');


Работает в IE8+

Лично мне удобнее использовать именно querySelector, особенно когда нужно получить только первый элемент:

var elem = document.querySelector('.className');


Получать всю коллекцию элементов надобность очень редкая, так как всё реализовываю нормальным способом.

Последний раз редактировалось ruslan_mart, 26.11.2015 в 18:32.
Ответить с цитированием
  #3 (permalink)  
Старый 26.11.2015, 19:04
Аспирант
Отправить личное сообщение для eddin Посмотреть профиль Найти все сообщения от eddin
 
Регистрация: 11.10.2010
Сообщений: 60

Ruslan_xDD, спасибо за ответ!
Да, этот вариант я тоже находил. Пишут, что он более ресурсоемкий по сравнению с getElementsByClassName.

Вот подумалось. А есть ли в JS возможность всем современным браузерам подставить под обработку getElementsByClassName, а для IE8+ querySelectorAll. Ну что-то типа условных комментариев в HTML.

Конечно можно (возможно, всё же я JS плохо знаю) с теми самыми коментариями и заморочиться, но по моему это будет совсем извращение. Да и плюс глобальные переменные придется объявлять походу...
Ответить с цитированием
  #4 (permalink)  
Старый 26.11.2015, 19:12
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

А нужно ли? Ведь IE8 уже умер.

if(!document.getElementsByClassName) { //Теперь в IE8 есть getElementsByClassName
     document.getElementsByClassName = Element.prototype.getElementsByClassName = function(className) {
           return this.querySelectorAll('.' + className.replace(/\s+/g, '.'));
     }
}

Последний раз редактировалось ruslan_mart, 26.11.2015 в 19:14.
Ответить с цитированием
  #5 (permalink)  
Старый 26.11.2015, 19:51
Аспирант
Отправить личное сообщение для eddin Посмотреть профиль Найти все сообщения от eddin
 
Регистрация: 11.10.2010
Сообщений: 60

Ruslan_xDD, спасибо! (форум вам карму не дает поднять, говорит нельзя подряд неск. раз, надо сначала кому-нибудь другому это сделать...)
вот так сделал, чтобы ошибка в IE не выскакивала:
if(document.getElementsByClassName){
   var action_title = action_list.getElementsByClassName('action_title');
}
else {
   var action_title = action_list.querySelectorAll('.action_title');
}

Насчет IE8 не соглашусь, тк периодически вижу машины с XP, как правило в офисах, а иногда и дома. Правда дома это обычно "второй" комп, который стал таковым после покупки нового, но всё же его тоже активно используют...

Кстати, Ruslan_xDD, форум подсказывает, что у вас сегодня День рождения!
От лица всех участников поздравляю вас с этим событием! Желаю всего самого лучшего! Пусть все ваши стремления оперативно перерастут в достижения! И спасибо вам за вашу помощь нам и поддержку такого замечательного сайта!
Ответить с цитированием
  #6 (permalink)  
Старый 26.11.2015, 20:12
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

eddin, Вы меня не поняли. Код выше, который я дал, он встроит getElementsByClassName в IE8, не нужны никакие условия, просто вставьте код в head и пользуйтесь getElementsByClassName на здоровье.

Ну, а если серьёзно, то все эти извращения не нужны, просто используйте везде querySelectorAll, он мощнее и удобнее.

А за поздравления спасибо.
Ответить с цитированием
  #7 (permalink)  
Старый 26.11.2015, 20:30
Аспирант
Отправить личное сообщение для eddin Посмотреть профиль Найти все сообщения от eddin
 
Регистрация: 11.10.2010
Сообщений: 60

Сообщение от Ruslan_xDD Посмотреть сообщение
просто вставьте код в head и пользуйтесь getElementsByClassName
Точно! Получилось, спасибо!)
Ruslan_xDD, а как можно научить IE8 вот такому?
window.addEventListener('resize',setHeight);

Я пробовал вот так:
window.attachEvent('onresize', setHeight);

и так:
window.attachEvent('onresize', function(){setHeight();});

не работает...
Ответить с цитированием
  #8 (permalink)  
Старый 26.11.2015, 20:41
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Например, так:

if(!window.addEventListener) {
    window.addEventListener = document.addEventListener = Element.prototype.addEventListener = function(type, callback) {
         var self = this;
         this.attachEvent('on' + type, function() {
             callback.call(self, window.event);
         });
    };
}


На скорую руку написал. Ещё нужно для removeEventListener полифил написать, ну и target в event добавить.

Последний раз редактировалось ruslan_mart, 26.11.2015 в 20:58.
Ответить с цитированием
  #9 (permalink)  
Старый 26.11.2015, 20:51
Аспирант
Отправить личное сообщение для eddin Посмотреть профиль Найти все сообщения от eddin
 
Регистрация: 11.10.2010
Сообщений: 60

Ruslan_xDD, спасибо! Буду разбираться)
Ответить с цитированием
  #10 (permalink)  
Старый 18.01.2017, 17:40
Интересующийся
Отправить личное сообщение для boor1 Посмотреть профиль Найти все сообщения от boor1
 
Регистрация: 08.09.2012
Сообщений: 10

Ничерта это в IE8 НЕ РАБОТАЕТ.
-----------------------------

querySelectorAll, равно как и querySelector

"Object doesn't support this property or method" (IE8 Сборка 8.0.6001.18702)


Равно как и код через прототип Element выдаёт ошибку "Element is undefined". Объект Element в IE8 отсутствует.

Последний раз редактировалось boor1, 18.01.2017 в 17:42.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить стиль внутри элемента с определнным id, только для браузера ie8 ansi_str Общие вопросы Javascript 4 03.05.2012 14:11
Свойство display: none для строк в таблице под IE8 vatar Internet Explorer 9 29.09.2011 14:47
Новая система управления сайтом Scripto CMS deepslam Ваши сайты и скрипты 38 31.01.2011 14:55
эмуляция события click для элемента select Polo Events/DOM/Window 4 16.12.2009 13:29
эмуляция онклик для сабмита AraGnom Events/DOM/Window 1 19.10.2009 09:42