<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();
}
}
Спасибо.
В современных браузерах вы можете использовать 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();
});
Установите свойство className
:
div.className = '';
class
НЕ ДОЛЖНО быть пустым , а свойство className
отражает это значение, атрибут должен быть удален вместо этого - div.removeAttribute("class")
- после того, как будет гарантировано, что в значении нет других имен классов чем те, которые должны быть удалены.
Обратите внимание, что 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 = '';
это зависит от вашего стиля кодирования и требований к совместимости.
div
. Кроме того, если переменная должна содержать результат вызова метода, который возвращает список элементов (.getElementsByTagName()
, как предполагает ее имя, может возвращать элемент S во множественном числе), имеет смысл присвоить переменной имя, которое отражает это :divs
, а неdiv
, или в данном случаеanchors
илиlinks
или что - то.