Как сравнить класс, если их много!?
пример 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. последний вариант больше всего похож на стандартный метод ;) для успокоения совести )))) |
Часовой пояс GMT +3, время: 16:01. |