@NewTypes
На себя

Удаление определенного className у всех узлов. Производительное решение?

Вопрос банальный и меня интересует скорее не просто решение, а красивое и быстрое с минимальной затратой процессорного времени. Узлов включающий некоторый .class может быть очень много (в добавок часто происходит динамическое добавление-удаление) и данное место является довольно критичным в интерфейсе.
В голову с лету ничего кроме цикла и replace на "" не приходит. Спросил нанятого фрилансера - ничего путного.
Посоветуйте пожалуйста лучший путь. Спасибо!
  • Вопрос задан
  • 2912 просмотров
Решения вопроса 1
RubaXa
@RubaXa
Если браузер поддерживает document.getElementsByClassName, то делаем один раз выборку, получаем "живую" коллекцию и работаем с ней jsfiddle.net/tBASB

Либо как советует lorus, быстро и красиво.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
А обязательно именно удалять классы? Может, достаточно их просто отключать?

Если да, то можно сделать так:
<body class="your-class-enabled">
  ...
    <div class="your-class">...</div>
    <div class="your-class">...</div>
  ...
</body>


И CSS переделать. Вместо
.your-class {
  ...
}

писать
.your-class-enabled .your-class {
  ...
}


В этом случае достаточно убрать класс "your-class-enabled" из body и класс "your-class" отключится у всех элементов разом.
Ответ написан
miraage
@miraage
Старый прогер
Я бы сделал что-то вроде такого (сейчас с утра может с регуляркой затуплю).
И не надо никаких велосипедов.

var nodes = document.querySelectorAll('.className'),
    className =' foo',
    re = new RegExp('\\s*' + className + '\\s*', 'gi');

for (var i = 0, len = nodes.length; i < len; i++) {
    var node = nodes[i];
    node.className = node.className.replace(re, ' ').trim();
}
Ответ написан
Комментировать
DrNemo
@DrNemo
Не знаю на сколько для вас медленно jquery, но можно сделать так:
$('.my_class').removeClass('my_class')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы