Как удалить класс в JavaScript?

1
<div id="tab1" class="nav left">
<ul>
<li><a href="/magento/" class="now">Home</a></li>
......
</ul>
</div>

Теперь я хочу удалить class="now" или установить значение класса пустым. Если url не для mangento, я использую следующий код. Но я не знаю, как написать последнюю часть.

window.onload = function removeNow() {
    var div = document.getElementById("tab1").getElementsByTagName("a");
    if (window.location.pathname != '/magento/') {
        div.removeClass();
    }
}

Спасибо.

  • 3
    Общий совет по сопровождению кода: если у вас есть переменная, которая будет содержать ссылку на элемент привязки , не называйте ее div . Кроме того, если переменная должна содержать результат вызова метода, который возвращает список элементов ( .getElementsByTagName() , как предполагает ее имя, может возвращать элемент S во множественном числе), имеет смысл присвоить переменной имя, которое отражает это : divs , а не div , или в данном случае anchors или links или что - то.
Теги:
dom

3 ответа

3

В современных браузерах вы можете использовать classList API:

div.classList.remove( 'now' );

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

for ( var i = 0; i < div.length; i++ ) {

    div[i].classList.remove( 'now' );

}

Если ваш браузер не поддерживает classList, используйте removeClass shim:

function removeClass( elem, name ) {

    var classlist = elem.className.split( /\s/ ), 
        newlist = [], 
        idx = 0;

    for ( ; idx < classlist.length; idx++ ) {
        if ( classlist[ idx ] !== name ) {
            newlist.push( classlist[ idx ] );
        }
    }

    elem.className = newlist.join(" ");

    return true;
}

или jQuery (с которым мы не обязаны использовать classList или className):

$('a').each(function() {

    if (window.location.pathname != '/magento/')
        $(this).removeClass();

});
  • 0
    Ошибка типа: div.classList не определен
  • 0
    @ stackoverflow002 Какой браузер вы используете?
Показать ещё 5 комментариев
1

Установите свойство className:

div.className = '';
  • 0
    извините, я тестировал код в firebug, когда на другой странице он не удаляет класс,
  • 0
    Поскольку значение атрибута class НЕ ДОЛЖНО быть пустым , а свойство className отражает это значение, атрибут должен быть удален вместо этого - div.removeAttribute("class") - после того, как будет гарантировано, что в значении нет других имен классов чем те, которые должны быть удалены.
Показать ещё 10 комментариев
0

Обратите внимание, что getElementsByTagName возвращает (возможно, пустой) NodeList, поэтому:

var div = document.getElementById("tab1").getElementsByTagName("a");

представляет собой совокупность всех потомков элемента A элемента с идентификатором "tab1" (и поэтому "div", вероятно, не является хорошим именем).

Если все, что вы хотите сделать, это удалить все значения класса первого такого элемента A, тогда:

div[0].className = '';

выполнит эту работу. Но поскольку NodeList может быть пустым, следующее будет более надежным:

if (div[0]) {
    div[0].className = '';
}

или, возможно,

div[0] && div[0].className = '';

это зависит от вашего стиля кодирования и требований к совместимости.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню