Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Какие замечания можете привести по представленным функциям (https://javascript.ru/forum/misc/27451-kakie-zamechaniya-mozhete-privesti-po-predstavlennym-funkciyam.html)

Антон Крамолов 13.04.2012 12:59

Какие замечания можете привести по представленным функциям
 
function hasClass(node, cls) {
    return node.className != '' ? (' ' + node.className + ' ').indexOf(' ' + cls + ' ') > -1 : false;
}

function addClass(node, cls) {
    if (!hasClass(node, cls)) {
        node.className =  node.className.trim() + ' ' + cls;
        return true;
    }
    return false;
}

function removeClass(node, cls) {
    if (hasClass(node, cls)) {
        node.className = ((' ' + node.className + ' ').replace(' ' + cls + ' ', ' ')).trim();
        return true;
    }
    return false;
}

Антон Крамолов 13.04.2012 13:11

Например первое можно переписать так:

function hasClass(node, cls) {
    return !node.className ? false : (' ' + node.className + ' ').indexOf(' ' + cls + ' ') > -1;
}

cmygeHm 13.04.2012 13:15

Для hasClass
если класс у элемента всего один => "superClass", то hasClass не найдет в нем вхождение ' ' + cls + ' '. Нужно проверять из скольки слов состоит класс. Даже если он состоит из трех - надо учесть, что он может быть слева или справа. Yeah?

cmygeHm 13.04.2012 13:16

Цитата:

Сообщение от Антон Крамолов (Сообщение 168762)
Например первое можно переписать так:

function hasClass(node, cls) {
    return !node.className ? false : (' ' + node.className + ' ').indexOf(' ' + cls + ' ') > -1;
}

Да, клево подметил

cmygeHm 13.04.2012 13:16

Блин! Втупил, ты ведь для этого и прибавил по пробелу слева и справа... Извини.

cmygeHm 13.04.2012 13:18

Для addClass не вижу смысла тримить node.className.trim(), потому что во первых ты чаще всего будешь присылать без пробелов, во вторых если пробелов будет два и более, класс все равно добавится, и будет нормально работать.

Антон Крамолов 13.04.2012 13:26

наверное

Антон Крамолов 13.04.2012 13:27

честно не разу даже не проверял

cmygeHm 13.04.2012 13:29

Цитата:

Сообщение от Антон Крамолов (Сообщение 168768)
честно не разу даже не проверял

Я проверил.

Антон Крамолов 13.04.2012 13:34

document.querySelector && document.querySelectorAll
какую обертку для них лучше всего написать?


Часовой пояс GMT +3, время: 20:22.