Как удалить второй класс у DOM элемента?

175
21 декабря 2021, 01:40

Есть код к примеру такой:

<div class="info">
 <i id="curr" class="first second"></i>
</div>

Как мне удалить 2-ой класс у элемента ?

Но мне необходимо учитывать то что имя второго класса будет изменяться динамически и .classList.remove('second') мне не подходит

Answer 1

Вариант 1, простейший (берем класс по индексу 1, и удаляем его):

const el = document.querySelector('#curr'); 
el.classList.remove(el.classList.item(1)); 
 
console.log(el.className);
<div class="info"> 
  <i id="curr" class="first second third"></i> 
</div>

Вариант 2, мощнейший splice для классов (ну а почему бы и нет :) ):

console.log(classSplice('#curr', 1, 2, 'foo', 'bar')); 
 
function classSplice(selector, ...args) { 
  const el = document.querySelector(selector); 
  if (!el) return; 
  const classes = el.className.split(/\s+/); 
  classes.splice(...args); 
  return (el.className = classes.join(' ')); 
}
<div class="info"> 
  <i id="curr" class="first second third fourth"></i> 
</div>

Answer 2

Вы спокойно можете получить строку классов, и из нее выбрать все необходимое.

Для примера добавил css классов, чтобы было видно.

var classList = document.getElementById('curr').className.split(/\s+/); 
document.getElementById('curr').className = classList[0];
.first{ 
  background-color: red; 
} 
.second{ 
  border-radius: 50px; 
}
<div class="info"> 
 <i id="curr" class="first second" style = "width: 50px; height: 50px; position: absolute"></i> 
</div>

Answer 3

Удаляет именно второй (по порядку) класс, а не все классы после первого.

function removeClass(position) { 
  const element = document.getElementById('curr'); 
  removeClassOnPosition(element, position); 
  showCurrentClasses(element); 
} 
 
function removeClassOnPosition(element, position = 0, count = 1) { 
  var classList = Array.from(document.getElementById('curr').classList); 
  classList.splice(position, count); 
  document.getElementById('curr').className = classList.join(' '); 
} 
 
function showCurrentClasses(element) { 
  currentClasses.textContent = element.classList; 
} 
 
showCurrentClasses(document.getElementById('curr'));
.first { 
  background-color: red; 
} 
 
.second { 
  border-radius: 50px; 
} 
 
.third { 
  color: white; 
}
<div class="info"> 
  <div id="curr" class="first second third" style="width: 50px; height: 50px">text</div> 
</div> 
<div id="currentClasses"></div> 
<button onclick="removeClass(1)">remove second class</button>

READ ALSO
Доступ к конфигу Chrome из расширения

Доступ к конфигу Chrome из расширения

Если у сайта проблемы с сертификатом, как правило, Chrome блокирует его открытиеПри помощи линка "Перейти на сайт (не безопасно)" сайт более не блокируется

95
Как узнать ip сайта через JavaScript API

Как узнать ip сайта через JavaScript API

Как через API расширений браузера firefox узнать IP сайтаНу или преобразовать URL в IP

89
Валидация имени загружаемого файла

Валидация имени загружаемого файла

Собственно при загрузке файла, хочу проверять его название и запрещать загрузку, при недопустимых символах

92
Код счетчика Метрики - в переменную. Возможно ли?

Код счетчика Метрики - в переменную. Возможно ли?

Я хочу отложить загрузку счетчика Метрики до момента, когда пользователь начнет скроллить страницу

159