Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как сравнить класс, если их много!? (https://javascript.ru/forum/events/1652-kak-sravnit-klass-esli-ikh-mnogo.html)

Sc@M 28.08.2008 17:25

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

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

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

суть: если у элементов классов много, как узнать, есть ли среди них нужный?!

ZoNT 28.08.2008 18:03

регулярные выражения тебе помогут.

Sc@M 28.08.2008 18:33

Регулярки это конешно хорошо и замечательно! И такая мысль мне естественно в голову приходила.
Я только начал писать на JavaScript, но имею большой опыт кодинга на PHP!
Меня интересует возможность произвести сверку на уровне свойства элемента как объекта DOM! Как более изощрённый и грамотный метод!
А не подходить к проблеме сзади :)

Kolyaj 28.08.2008 18:52

Почему сзади? Нормальный подход.
function hasClassName(elem, cl) {
  return (new RegExp('(^|\s)' + cl + '(\s|$)')).test(elem.className);
}

ZoNT 28.08.2008 18:58

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

Я тут задачу решал на разбор формул и выполнение в браузере, так вот в компилируемо языке приходится разбирать формулу по кусочкам, а с помощью пары регулярок и эвала можно сделать это просто и красиво..

Sc@M 28.08.2008 19:03

:)
хорошо, убедили! спасибо :)
если кто-то знает другой подход к данному вопросу, просьба высказаться! :)

Kolyaj 28.08.2008 19:32

Если щас прибегут и скажут, что можно разбивать строку по пробелам на массив, а потом проверять, если ли в этом массиве искомый класс, вы им не верьте :)

Sc@M 28.08.2008 19:53

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

Я имел ввиду !_принципиально_! другой подход если кто знает, пусть не молчит!
а не хотел смотреть на те же яйца только в профиль :)))

Kolyaj 28.08.2008 20:00

Да нету других подходов.

Octane 29.08.2008 00:24

Нету никаких таких средств :D даже в самых современных браузерах можно только выполнить поиск по нескольким классам 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. последний вариант больше всего похож на стандартный метод ;) для успокоения совести ))))


Часовой пояс GMT +3, время: 19:26.