Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.01.2009, 19:13
Новичок на форуме
Отправить личное сообщение для Krappt Посмотреть профиль Найти все сообщения от Krappt
 
Регистрация: 10.01.2009
Сообщений: 7

Поиск объекта по 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, можно ли как-то сделать, чтобы он искал по классам?

Заранее благодарен.
Ответить с цитированием
  #2 (permalink)  
Старый 10.01.2009, 19:38
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Для поиска элементов по имени класса можно использовать в новых браузерах метод getElementsByClassName и его эмуляцию для старых браузеров. В любом случае простой заменой getElementById на getElementsByClassName вам не обойтись, скрипт нужно полностью переписать, чтобы иметь возможность работать с несколькими элементами.
Ответить с цитированием
  #3 (permalink)  
Старый 10.01.2009, 19:42
Новичок на форуме
Отправить личное сообщение для Krappt Посмотреть профиль Найти все сообщения от Krappt
 
Регистрация: 10.01.2009
Сообщений: 7

Спасибо за ответ. в JS я, мягко говоря, ноль. Использую готовые скрипты, но к сожалению найти подобный скрипт под классы я не смог.

Вы не можете что-либо подсказать?
Ответить с цитированием
  #4 (permalink)  
Старый 10.01.2009, 21:17
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Получить текст со страницы...
ЗЫ третья ссылка по форумному поиску по слову class
Ответить с цитированием
  #5 (permalink)  
Старый 11.01.2009, 17:02
-
Отправить личное сообщение для twolf Посмотреть профиль Найти все сообщения от twolf
 
Регистрация: 16.07.2008
Сообщений: 207

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;
}
Ответить с цитированием
  #6 (permalink)  
Старый 11.01.2009, 19:22
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от twolf Посмотреть сообщение
…
if(document.getElementsByClass) return document.getElementsByClass(cls, node, tag);
…
twolf, какой смысл этой строчки?

И классов может быть несколько (перечислены через пробел), многие верстальщики знают о этой возможности и активно её используют, поэтому ваша функция будет работать далеко не везде.

Функция должна выглядеть примерно таким образом: getElementsByClassName

Последний раз редактировалось Octane, 11.01.2009 в 19:24.
Ответить с цитированием
  #7 (permalink)  
Старый 12.01.2009, 12:45
-
Отправить личное сообщение для twolf Посмотреть профиль Найти все сообщения от twolf
 
Регистрация: 16.07.2008
Сообщений: 207

ну функция то не моя. а доработанная Дастина Диаса.
а вот тут можно посмотреть спидтест по аналогичным функциям.

Такая будет работать и с пробелами
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;
}
Ответить с цитированием
  #8 (permalink)  
Старый 12.01.2009, 13:00
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Эта функция будет работать не правильно.
Ответить с цитированием
  #9 (permalink)  
Старый 10.03.2009, 23:52
dector@yandex.ru
 
Сообщений: n/a

Это все ерунда
Зачем в диве прокручивать контент? Он прокручивается сам, если у дива поставить свойство стиля overflow:auto. Появится скролл и все будет прокручиваться само
Ответить с цитированием
  #10 (permalink)  
Старый 11.03.2009, 00:00
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от dector@yandex.ru
Зачем в диве прокручивать контент?
Есть такая задача у некоторых деятелей интернет-индустрии -- дать возможность посмотреть контент, но максимально сложно
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как узнать тип значения объекта? VHS Общие вопросы Javascript 1 07.01.2009 23:57
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00
Для чего ограничен поиск? ZoNT Сайт Javascript.ru 4 01.10.2008 15:55
Не работает перебор свойств объекта BANick Общие вопросы Javascript 1 16.09.2008 22:46
Поиск в массиве через JavaScript Noran Общие вопросы Javascript 0 10.08.2008 17:31