2013-12-07 2 views
0

Ищем чистый яваскрипт для замены этого Jquery кода:Javascript - removeClass к элементам, которые имеют его

$().evt(function(){ 
    $('.class').removeClass('active'); 
    $(this).addClass('active'); 
}) 

это, как я пытаюсь

node.addEventListener('contextmenu', function(e){ 
      e.preventDefault(); 
      var currentActive = document.querySelectorAll('.active'); 
      alert(currentActive.length); 
      currentActive.className = ''; 
      this.className = 'active'; 
     }); 

скрипка: http://jsfiddle.net/toniweb/Wx8Jf/34/

Но текущий активный класс не удален

+0

Что вы имеете в виду '$() ЭВТ (функция() {})'? Какой обработчик событий выполняет '.evt()' substitute? Вы имели в виду '.contextmenu()'? – Sk8erPeter

ответ

1

Попробуйте следующее:

node.addEventListener('contextmenu', function(e){ 
      e.preventDefault(); 
      var currentActive = document.querySelectorAll('.active'); 
      for (var i = 0; i < currentActive.length; i++) { 
       currentActive[i].classList.remove('active'); 
      } 
      this.className += ' active'; 
     }); 

Это удалит из этих узлов только класс active.

1

Вам понадобится для доступа правильного узла, как document.querySelectorAll возвращает NodeList

Попробуйте это,

node.addEventListener('contextmenu', function(e){ 
     e.preventDefault(); 
     var currentActive = document.querySelectorAll('.active'); 
     if(currentActive[0]) { // first item with class 'active' 
      currentActive[0].className = ''; 
     } 
     this.className = 'active'; 
    }); 

Обновлено скрипка: http://jsfiddle.net/Wx8Jf/35/

+0

Отлично, работает, спасибо! –

+0

Зачем использовать 'querySelectorAll', если вы только изменяете первый элемент. Просто 'querySelector' будет делать. – tewathia

+0

@ToniMichelCaubet: вы всегда должны принять ответ, который решил вашу проблему, щелкнув зеленый галочку. Благодарю. – Sk8erPeter

0

Попробуйте удалить любой класс из списка конкретного элемента:

var removeClassName = 'active'; 
var classes = element.className.match(/\S+/g); 
var ind = classes.indexOf(removeClassName); 
if (ind >= 0) 
    classes.splice(index, 1); 
element.className = classes.join(' '); 
0

Попробуйте это:

var node = mainNodes[i]; 
node.addEventListener('contextmenu', function(e){ 
    e.preventDefault(); 
    var currentActive = document.querySelectorAll('.active'); 

    for (element in currentActive) { 
     element.className = element.className.replace(' active', ''); 
    } 

    e.target.className += ' active'; 

В контексте обработчика событий, это будет ссылка на анонимную функцию. Вместо этого используйте e.target.

Этот код удалит класс .active для всех его элементов и добавит этот класс в цель события. Другие ответы работают только на первый элемент с этим классом, это то, что вы хотите?

Обновлено скрипку:. http://jsfiddle.net/Wx8Jf/36/

Смежные вопросы