И replace ничего не удалит, если соответствующая подстрока не существует.
Ответ 2
По крайней мере, для Chrome полезно добавить проверку hasClass() перед removeClass(), поскольку jQuery безоговорочно назначает elem.className для новой строки, даже если строка не изменилась, что заставляет Chrome сделать недействительным и пересчитать макет.
Можно утверждать, что это ошибка в Chrome, и она должна проверить, действительно ли className изменилось с предыдущего значения. Однако также может быть, что браузер должен пересчитать макет из-за некоторых неясных требований, которые написаны где-то глубоко в спецификации html.
Я не тестировал Firefox. Веб-инспектор Safari бесполезен, так как он не скажет вам, почему макет был недействителен/пересчитан (какая функция javascript вызвала его).