2014-10-10 45 views
-8

嗨,我試圖將JavaScript代碼轉換爲jQuery以獲得更好的性能。jQuery轉換代碼不會工作

這裏是我的JS代碼:

(function() { 

    var body_container = document.body, 
     content = document.querySelector('.content-wrap'), 
     open_menu = document.getElementById('open-button'), 
     close_menu = document.getElementById('close-button'), 
     checkifOpen = false; 

    function init() { 
     initialize_process(); 
    } 

    function initialize_process() { 
     open_menu.addEventListener('click', toggleMenu); 
     if(close_menu) { 
      close_menu.addEventListener('click', toggleMenu); 
     } 

     // close the menu element if the target it´s not the menu element or one of its descendants.. 
     content.addEventListener('click', function(ev) { 
      var target = ev.target; 
      if(checkifOpen && target !== open_menu) { 
       toggleMenu(); 
      } 
     }); 
    } 

現在,這裏是該JavaScript的我轉換的jQuery版本:

(function() { 

    var body_container = $('body'), 
     content = $('.content-wrap'), 
     open_menu = $('.open-button'), 
     close_menu = $('.close-button'), 
     checkifOpen = false; 

    function init() { 
     initialize_process(); 
    } 


    function initialize_process() { 
     open_menu.bind('click', toggleMenu); 
     if(close_menu) { 
      close_menu.bind('click', toggleMenu); 
     } 

     // close the menu element if the target it´s not the menu element or one of its descendants.. 
     content.bind('click', function(ev) { 
      var target = ev.target; 
      if(checkifOpen && target !== open_menu) { 
       toggleMenu(); 
      } 
     }); 
    } 

出於某種原因,這個代碼將無法正常工作。只是想知道我哪裏錯了。尤其是我將元素綁定到的部分替換爲JavaScript的addEventListener函數。

任何幫助,將不勝感激。

+7

爲了獲得更好的性能? jQuery幾乎從不比Vanilla JS提供更好的性能。 – Teemu 2014-10-10 14:20:06

+1

'if(close_menu)'{總會是真的 – epascarello 2014-10-10 14:21:51

回答

1

您沒有使用正確的選擇器。原來的代碼有這樣的:

document.getElementById('open-button') 

它與id「開放式按鈕」標識的元素。新的代碼具有這樣的:

open_menu = $('.open-button') 

其與class「開放式按鈕」標識的元件(或一組元件的)。要使用id你需要使用一個#

open_menu = $('#open-button') 

有可能會有更多的問題,但這個問題沒有別的預期將工作開始......

+0

感謝這行代碼在這裏:open_menu.addEventListener('click',toggleMenu);我應該使用綁定嗎? – 2014-10-10 14:26:49

+1

@RizabelIdoz:如果你打算使用jQuery,那麼我認爲使用jQuery的函數是有意義的。 '.click()','.on()'等。請注意,正如評論中所提到的,使用jQuery *不是*來解決性能問題。它提供了一個簡單,流暢的API來處理常見的任務。目標是擁有更清晰的代碼,而不是*更多的性能代碼。 – David 2014-10-10 14:29:29