2015-02-02 3 views
0

Я пытаюсь удалить класс при нажатии на элемент с определенным классом. Я сделал этот javascript, и он работает. Но является ли этот правильный синтаксис таким способом. Может ли это быть более эффективным?Это код javascript правильно?

// Clear notifications alerts 
$(document).on('click', '.js-clear-notifications', function() { 
    $('.AlertNotifications').remove(); 
}); 

// clear inbox alerts 
$(document).on('click', '.js-clear-inbox', function() { 
    $('.AlertInbox').remove(); 
}); 
+1

Это действительно не по теме, у вас нет проблем, поэтому нет смысла задавать этот вопрос. В частности, вы спрашиваете об «эффективности». С таким простым фрагментом эффективность является совершенно ничтожным фактором. Вы просто присоединяете обработчики событий, что вы хотите, чтобы мы вам говорили? Ответ прост: «Да, это правильно». – MarioDS

+0

Мне просто интересно, может ли он быть более эффективным с циклом if/else. И я не был уверен, разрешено ли ему использовать 2 раза: $ (document) .on ('click', ... – nuet

ответ

0

Ваш javascript-код верен при условии, что вы загружаете jQuery.

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

Альтернативой будет:

$('.js-clear-notifications').on('click', function() { 
    $('.AlertNotifications').remove(); 
}); 

который привязывается так много обработчиков событий, сколько элементов в объекте JQuery. Чуть менее эффективен, хотя, вероятно, вы никогда не заметите, кроме крайних случаев.

+0

Благодарим за подтверждение – nuet

+0

@nuet: Имейте в виду, что эта альтернатива будет работать, только если '.js-clear-notifications' существует, когда это выполняется (после этого этот элемент не создается динамически). Если это ваш случай, это решение будет более эффективным, потому что вы только слушаете клики по элементам этого класса, а не по всему документу, используя [делегирование событий] (http://learn.jquery.com/events/event -delegation /), как и код, опубликованный в вашем вопросе. – blex

+0

@blex Кроме того, любые новые элементы '.js-clear-notification' не будут иметь обработчик кликов и должны будут быть привязаны повторно. Это добавляет ловушку, что вы должны быть осторожны, чтобы не добавлять дополнительные обработчики к элементам, которые уже есть. Имо, исходный код имеет наибольшие преимущества. – MarioDS

-2

Я редактирую это в ответ на отзывы в комментариях.

Если вы хотите удалить все элементы с классом AlertNotifications, что и делает ваш код, то то, что у вас есть, является правильным.

Если то, что вы хотите, чтобы удалить только класс, который является то, что текст поста сказал, вы хотите removeClass, не удалять:

$('.js-clear-notifications').on('click',function() { 
     $(this).removeClass('AlertNotificitions'); 
    } 
+0

Не угадайте желаемое поведение в ответах, автор заявил, что его код работает для него так, как он хочет, чтобы это было. – MarioDS

+0

«Я пытаюсь удалить класс при нажатии на элемент с определенным классом». Это то, что сказал ОП, почему это предположение, на которое он хотел, чтобы он ответил? –

+0

справедливо: это сбивает с толку. поскольку OP упомянул, что код работает, чтобы удалить элементы из DOM, действительно является желаемым поведением. – MarioDS

-1

мне более правильный способ сделать это что-то как это:

... 
$('.js-clear-inbox').on('click', function() { 
    $('.AlertInbox').remove(); 
}); 
... 

Я также предлагаю, чтобы иметь более специфические селекторы т.е.

$('div .js-clear-inbox') 

Я надеюсь, что это помогает.

+0

Ваше предложение на самом деле хуже исходного кода, см. мой ответ почему. – MarioDS

+0

Как это хуже? Вы предполагали функциональность, а также как Знаете ли вы, что элемент с щелчком имеет класс, который хочет удалить автор? –

+0

Он подключил один обработчик для выбора событий для всех элементов. Он использовал параметр фильтра для указания селектора. «Не знаю, что это« div », поэтому почему он предлагает« div »в своем селекторе?Он не сказал, что слишком много элементов были нацелены ... Насколько я вижу, вы только что изобрели проблему, которой нет. – MarioDS

-3

Новый способ, если вы уже определили переменную, правильный способ удалить его из DOM будет:

var elem = document.getElementById("myDiv"); 
elem.remove(); 

Но если вы только начинаете вне, .remove будет лучшим мнение ,

+0

'.remove()' не является собственным собственным javascript, поэтому ваш код даже не работает. Кроме того, это кажется совершенно не относящимся к вопросу. – MarioDS

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