Улучшить регулярное выражение замены названий класса


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

function fn_page_change(event) {
    event.preventDefault();
    var activePage = $(".ui-active");
    var newPage = $(event.target.getAttribute("href"));
    activePage.className = activePage.className.replace(/(?:^|\s)ui-active(?!\S)/, " ui-inactive ");
    newPage.className = newPage.className.replace(/(?:^|\s)ui-inactive(?!\S)/, " ui-active");
}

Я не с помощью jQuery, в $ это мои собственные

function $(selector, el) {
    if (!el) {
        el = document;
    }
    var tmp = el.querySelectorAll(selector);
    if (tmp.length === 1) {
        return tmp[0];
    }
    return tmp;
}

Вот пример



1282
1
задан 28 сентября 2011 в 06:09 Источник Поделиться
Комментарии
1 ответ

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

function replaceClass(el, oldClass, newClass) {
el.className = el.className.replace(new RegExp("\\b" + oldClass + "\\b"), newClass);
}

function fn_page_change(event) {
event.preventDefault();
var activePage = $(".ui-active");
var newPage = $(event.target.getAttribute("href"));
replaceClass(activePage, "ui-active", "ui-inactive");
replaceClass(newPage, "ui-inactive", "ui-active");
}

Если вы хотели версию replaceClass() , что бы справиться с любой из типов возвращаемых значений, вы выходите из своего функционального переключателя (один дом объект или массив объектов дом), тогда вы могли бы использовать это:

function replaceClass(el, oldClass, newClass) {
var re = new RegExp("\\b" + oldClass + "\\b");
if (el.nodeType) {
el.className = el.className.replace(re, newClass);
} else {
for (var i = 0; i < el.length; i++) {
el[i].className = el[i].className.replace(re, newClass);
}
}
}

3
ответ дан 28 сентября 2011 в 06:09 Источник Поделиться