Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.08.2008, 16:25
Интересующийся
Отправить личное сообщение для Sc@M Посмотреть профиль Найти все сообщения от Sc@M
 
Регистрация: 28.08.2008
Сообщений: 16

Как сравнить класс, если их много!?
пример HTML-кода:
<div id="test" class="file active"></div>

getElementById('test').className даёт "file active"

нужно сделать сверку типа:
if(getElementById('test').className == 'конкретный класс') {}

суть: если у элементов классов много, как узнать, есть ли среди них нужный?!
Ответить с цитированием
  #2 (permalink)  
Старый 28.08.2008, 17:03
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 24.07.2008
Сообщений: 1,271

регулярные выражения тебе помогут.
Ответить с цитированием
  #3 (permalink)  
Старый 28.08.2008, 17:33
Интересующийся
Отправить личное сообщение для Sc@M Посмотреть профиль Найти все сообщения от Sc@M
 
Регистрация: 28.08.2008
Сообщений: 16

Регулярки это конешно хорошо и замечательно! И такая мысль мне естественно в голову приходила.
Я только начал писать на JavaScript, но имею большой опыт кодинга на PHP!
Меня интересует возможность произвести сверку на уровне свойства элемента как объекта DOM! Как более изощрённый и грамотный метод!
А не подходить к проблеме сзади
Ответить с цитированием
  #4 (permalink)  
Старый 28.08.2008, 17:52
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Почему сзади? Нормальный подход.
function hasClassName(elem, cl) {
  return (new RegExp('(^|\s)' + cl + '(\s|$)')).test(elem.className);
}
Ответить с цитированием
  #5 (permalink)  
Старый 28.08.2008, 17:58
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 24.07.2008
Сообщений: 1,271

регулярки как раз позволяют подходить спереди...

Я тут задачу решал на разбор формул и выполнение в браузере, так вот в компилируемо языке приходится разбирать формулу по кусочкам, а с помощью пары регулярок и эвала можно сделать это просто и красиво..
Ответить с цитированием
  #6 (permalink)  
Старый 28.08.2008, 18:03
Интересующийся
Отправить личное сообщение для Sc@M Посмотреть профиль Найти все сообщения от Sc@M
 
Регистрация: 28.08.2008
Сообщений: 16


хорошо, убедили! спасибо
если кто-то знает другой подход к данному вопросу, просьба высказаться!
Ответить с цитированием
  #7 (permalink)  
Старый 28.08.2008, 18:32
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Если щас прибегут и скажут, что можно разбивать строку по пробелам на массив, а потом проверять, если ли в этом массиве искомый класс, вы им не верьте
Ответить с цитированием
  #8 (permalink)  
Старый 28.08.2008, 18:53
Интересующийся
Отправить личное сообщение для Sc@M Посмотреть профиль Найти все сообщения от Sc@M
 
Регистрация: 28.08.2008
Сообщений: 16

остроумно
такими извратами я страдал, когда делал первые шаги на PHP
ребят, отнеситесь серьёзно.
Я нормальный программер, но только на PHP
просто исторически сложилась так, что с JavaScript вовремя не подружился.

Я имел ввиду !_принципиально_! другой подход если кто знает, пусть не молчит!
а не хотел смотреть на те же яйца только в профиль ))
Ответить с цитированием
  #9 (permalink)  
Старый 28.08.2008, 19:00
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Да нету других подходов.
Ответить с цитированием
  #10 (permalink)  
Старый 28.08.2008, 23:24
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

Нету никаких таких средств даже в самых современных браузерах можно только выполнить поиск по нескольким классам node.getElementsByClassName('className1 className2');
Поэтому используй регулярные выражения. Если кажутся громоздкими коды, которые тебе написали ранее, можно немного сократить функцию:
function hasClass(str, search) {
	return !!(str.search('\\b' +  search + '\\b') + 1);
}

hasClass(node.className, 'className') - возвратит true или false в зависимости от наличия указанного класса.

Говорят, что при использовании мета-символа '\b' (граница слова) в древнейших браузерах бывают проблемы, лично я не сталкивался, в IE5 - работает...

Можно пойти дальше и добаить в прототип объекта String новый метод
String.prototype.hasClass = function(str) {
	return this.search('\\b' +  str + '\\b') + 1;
}

Используем так:
node.className.hasClass('className')

Вернет 0 - если класс не найден или индекс+1 первого вхождения подстроки с именем класса в строке className :cool:

p.s. последний вариант больше всего похож на стандартный метод для успокоения совести ))))

Последний раз редактировалось Octane, 28.08.2008 в 23:54.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать свернуто окно браузера или нет. bar-boss Events/DOM/Window 3 25.09.2008 15:09
форма как в ExtJS 2 magistr_bender Общие вопросы Javascript 0 11.09.2008 15:01
Раскрывающееся меню, как переставить на другую сторону? Resager Events/DOM/Window 8 22.08.2008 20:56