2014-12-23 4 views
0

У меня есть следующий код jQuery, и он отлично работает, но он загружается очень медленно. Я не профессионал в jQuery, может ли кто-нибудь помочь мне сделать следующий фрагмент кода более кратким? Я по достоинству оценю это.Как сжать следующий фрагмент кода jQuery

jQuery(document).ready(function() { 
    // colorpicker field 
    jQuery('.twb_btn_color, .twb_spam_clr, .twb_btn_txt_color, .twb_bg_color, .twb_main_title_color, .twb_sub_title_color') 
     .each(function(){ 
      var $this = jQuery(this), 
       id = $this.attr('rel'); 
      $this.farbtastic('#' + id).hide(); 
      jQuery('.twb, .twb-title').click(function() { 
       jQuery('.twb_btn_color').fadeIn('medium').siblings("div").hide(); 
      }); 
      jQuery('.twb-spam, .twb-spam-title').click(function() { 
       jQuery('.twb_spam_clr').fadeIn('medium').siblings("div").hide(); 
      }); 
      jQuery('.twb-btn-txt-color, .twb-btn-txt-color-title').click(function() { 
       jQuery('.twb_btn_txt_color').fadeIn('medium').siblings("div").hide(); 
      }); 
      jQuery('.twb-bg-color, .twb-bg-color-title').click(function() { 
       jQuery('.twb_bg_color').fadeIn('medium').siblings("div").hide(); 
      }); 
      jQuery('.twb-main-title-color, .twb-main-title-color').click(function() { 
        jQuery('.twb_main_title_color').fadeIn('medium').siblings("div").hide(); 
      }); 
      jQuery('.twb-sub-title-color, .twb-sub-title-color').click(function() { 
       jQuery('.twb_sub_title_color').fadeIn('medium').siblings("div").hide(); 
      }); 
    }); 
}); 
+3

Вам не нужно связывать обработчик событий в каждом блоке. Переместите их в _document ready_ handler – Satpal

+0

Не могли бы вы объяснить, как это сделать? – absikandar

ответ

1

Типичный способ обработки это дать все элементы, которые вы хотите, чтобы выполнить те же действия на то же имя класса.

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

$('body').on('click', '.common-class-name', function() { 
    $(this).fadeIn('medium').siblings("div").hide(); 
}); 

Это требует что вы даете всем элементам одно и то же имя класса. Затем вы можете ссылаться на тот, который был нажат с помощью $(this).

+0

Спасибо за помощь. – absikandar

+0

К сожалению, это не решило мою проблему. Потому что при нажатии он должен запускать функцию в разделителе div. Не в том же div, поэтому $ (здесь) работать не будет. HTML структура кода, как следующий: ' <класс =«имя-common_class»ввода />

absikandar

+0

' @absikandar Если они всегда относительны, то вы можете быть в состоянии использовать что-то вроде '.closest()' или '.next()'. – Jivings

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