Поиск объекта по class
Здравствуйте!
У меня есть скрипт, который отвечает за прокрутку контента в div'e: function init(id) { var obj = document.getElementById(id); if (obj) { obj.state = 0;//инициализируем состояние obj.timer = null; obj.maxVert = obj.scrollHeight - obj.offsetHeight;//максимальная высота прокрутки } } function scroll_down(id,timer) { var obj = document.getElementById(id);//получаем объект по ID if (!obj.maxVert) init(id);//если объект еще не иниициализировался - инициализируем if (timer == undefined) obj.state = 1;//если не передан второй параметр timer, значит вызов был от кнопки прокрутки, ставим состояние прокрутки вниз if ((obj.maxVert > obj.scrollTop) && (obj.state == 1)) {//если не достигли предела и состояние прокрутки все еще "вниз"(1) obj.scrollTop = obj.scrollTop + 10;//добавляем смещение прокрутки на 10 пикселей obj.timer = setTimeout('scroll_down(\''+id+'\',true)',100);//устанавливаем таймер вызова этой же функции для дальнейшей прокрутки } } function scroll_up(id,timer) { var obj = document.getElementById(id);//получаем объект по ID if (!obj.maxVert) init(id);//если объект еще не иниициализировался - инициализируем if (timer == undefined) obj.state = -1;//если не передан второй параметр timer, значит вызов был от кнопки прокрутки,ставим состояние прокрутки вверх if ((obj.scrollTop > 0) && (obj.state == -1)) {//если не достигли начала и состояние прокрутки все еще "вверх"(-1) obj.scrollTop = obj.scrollTop > 10 ? obj.scrollTop - 10 : 0;//добавляем смещение прокрутки на 10 пикселей obj.timer = setTimeout('scroll_up(\''+id+'\',true)',100);//устанавливаем таймер вызова этой же функции для дальнейшей прокрутки } } function scroll_stop(id) { var obj = document.getElementById(id);//получаем объект по ID if (obj) { if (obj.timer) clearTimeout(obj.timer); obj.state = 0; } } Прошу обратить внимание, что скрипт использует поиск по id'y, можно ли как-то сделать, чтобы он искал по классам? Заранее благодарен. |
Для поиска элементов по имени класса можно использовать в новых браузерах метод getElementsByClassName и его эмуляцию для старых браузеров. В любом случае простой заменой getElementById на getElementsByClassName вам не обойтись, скрипт нужно полностью переписать, чтобы иметь возможность работать с несколькими элементами.
|
Спасибо за ответ. в JS я, мягко говоря, ноль. Использую готовые скрипты, но к сожалению найти подобный скрипт под классы я не смог.
Вы не можете что-либо подсказать? |
http://javascript.ru/forum/misc/2464...-stranicy.html
ЗЫ третья ссылка по форумному поиску по слову class |
function getElementsByClass(cls, node, tag) { if(document.getElementsByClass) return document.getElementsByClass(cls, node, tag); if(! node) node = document; if(! tag) tag = '*'; var them = node.getElementsByTagName(tag), rez = []; for(var notI = 0; notI < them.length; ++notI) if(them[notI].className == cls) rez.push(them[notI]); return rez; } |
Цитата:
И классов может быть несколько (перечислены через пробел), многие верстальщики знают о этой возможности и активно её используют, поэтому ваша функция будет работать далеко не везде. Функция должна выглядеть примерно таким образом: getElementsByClassName |
ну функция то не моя. а доработанная Дастина Диаса.
а вот тут можно посмотреть спидтест по аналогичным функциям. Такая будет работать и с пробелами function getElementsByClass(cls, node, tag) { if(! node) node = document; if(! tag) tag = '*'; var them = node.getElementsByTagName(tag), var rez = []; cls = " " + cls + " "; for(var notI = 0; notI < them.length; ++notI){ var classString = " " + them[notI].className + " "; if(classString.indexOf(cls) != -1) rez.push(them[notI]); } return rez; } |
Эта функция будет работать не правильно.
|
Это все ерунда
Зачем в диве прокручивать контент? Он прокручивается сам, если у дива поставить свойство стиля overflow:auto. Появится скролл и все будет прокручиваться само
|
Цитата:
|
Часовой пояс GMT +3, время: 16:58. |