Как сравнить класс, если их много!?
пример HTML-кода:
<div id="test" class="file active"></div> getElementById('test').className даёт "file active" нужно сделать сверку типа: if(getElementById('test').className == 'конкретный класс') {} суть: если у элементов классов много, как узнать, есть ли среди них нужный?! |
регулярные выражения тебе помогут.
|
Регулярки это конешно хорошо и замечательно! И такая мысль мне естественно в голову приходила.
Я только начал писать на JavaScript, но имею большой опыт кодинга на PHP! Меня интересует возможность произвести сверку на уровне свойства элемента как объекта DOM! Как более изощрённый и грамотный метод! А не подходить к проблеме сзади :) |
Почему сзади? Нормальный подход.
function hasClassName(elem, cl) { return (new RegExp('(^|\s)' + cl + '(\s|$)')).test(elem.className); } |
регулярки как раз позволяют подходить спереди... :)
Я тут задачу решал на разбор формул и выполнение в браузере, так вот в компилируемо языке приходится разбирать формулу по кусочкам, а с помощью пары регулярок и эвала можно сделать это просто и красиво.. |
:)
хорошо, убедили! спасибо :) если кто-то знает другой подход к данному вопросу, просьба высказаться! :) |
Если щас прибегут и скажут, что можно разбивать строку по пробелам на массив, а потом проверять, если ли в этом массиве искомый класс, вы им не верьте :)
|
остроумно :)
такими извратами я страдал, когда делал первые шаги на PHP :) ребят, отнеситесь серьёзно. Я нормальный программер, но только на PHP :) просто исторически сложилась так, что с JavaScript вовремя не подружился. Я имел ввиду !_принципиально_! другой подход если кто знает, пусть не молчит! а не хотел смотреть на те же яйца только в профиль :))) |
Да нету других подходов.
|
Нету никаких таких средств :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. последний вариант больше всего похож на стандартный метод ;) для успокоения совести )))) |
прекрасно!
а как вам вариант: elem.className.IndexOf('class') >= 0 И НЕ НУЖНЫ НИКАКИЕ РЕГУЛЯРКИ! как посоветовали коллеги ранее :) ЗАЧЕМ?! |
Sc@M, а вы подумайте.
З.Ы. И indexOf, а не IndexOf. |
Цитата:
не знаю, прошу дать ответ "в чём разница" и где будет сбой о камни? :) |
ну вот есть у меня класс "figoviyclass red",тогда:
elem.className.indexOf('class') = 7 >0 ошибочка, понимаиш... |
ZoNT, не очень :(
какой случай ты рассматриваешь? такой: elem.className.indexOf('figoviyclass red') >= 0 где className = 'blablabla figoviyclass red blablabla' так вхождение строки же найдётся! пробел тоже символ :) |
ты что читать не умеешь???
Цитата:
elem.className.indexOf('class') выдаст 7, то есть >=0, то есть как будто бы 'class' присутствует в классе этого элемента. Но его-то там нет!!! Там есть "figoviyclass"!!! |
:)
понял ;) сразу не вогнал :) ... утро :) ... |
Часовой пояс GMT +3, время: 16:38. |