2012-04-11 42 views
1

只是遊蕩,如果這是有道理的,使用jQuery的是否準備好文件函數中像下面的語句,以確保腳本只有在特定頁面上發射..使用if語句來分隔頁面相關代碼和jQuery有意義嗎?

if(window.location.href.indexOf("our-team")>= 0){ 
      if(window.location.hash) { 
       var hash = window.location.hash; 
       $('#teamMembers div:not('+hash+')').hide(); 
       $("#teamMenu .imgHolder").removeClass('active'); 
       $('a[href='+hash+']').closest(".imgHolder").addClass('active'); 
      } 
      else { 
       $('#teamMembers div:not(#member1)').hide(); 
      } 
     } 

這可能不是非常有效的,但是是如果當前頁面不包含我們的團隊在url中,則必須聲明停止腳本運行。

任何想法傢伙?

回答

1

如果您不在這些項目不存在的頁面上運行大量選擇器操作,您將獲得最佳性能。因此,如果通過檢查URL或其他快速檢查來篩選出那些選擇器操作是很容易的,那麼出於性能原因這可能是理想的。

就我個人而言,我更願意在身體標籤上標識具有類名稱的頁面類型,而不是檢查URL。這意味着你正在尋找更多的預期內容,而不是內容來自何處,如果管理該網站的某個人決定更改URL佈局或名稱,則代碼將不依賴於此。

if ($(document.body).hasClass("ourteam")) { 
    if (window.location.hash) { 
     var hash = window.location.hash; 
     $('#teamMembers div:not('+hash+')').hide(); 
     $("#teamMenu .imgHolder").removeClass('active'); 
     $('a[href='+hash+']').closest(".imgHolder").addClass('active'); 
    } else { 
     $('#teamMembers div:not(#member1)').hide(); 
    } 
} 

從技術上講,如果沒有使用的選擇器存在於您不想處理的頁面中,則不需要第一個if語句。但是,在許多不適用的頁面上運行4-5個額外的選擇器操作效率不高。而且,如果每個頁面在普通JS中都有這種類型的代碼,並且因此它是4-5個操作* 50頁,那麼這將浪費很多選擇器操作,並且可能真正影響站點性能。您擁有的頁數越多,您可能會在另一頁中重複選擇器的機會就越多,並且從一個頁面中查找JS意外影響另一頁。

+0

非常感謝,這已經爲我澄清了一些事情,我已經使用了替代方法,如。 'code'if($('#div')。length){ jQuery('#div')。functionName({// Stuff here });如果($(document.body).hasClass(「someClass」))'code'這個語句比這個更有效嗎? – madmatuk 2012-04-11 09:16:05

+0

'if($(document.body).hasClass(「ourteam」))'非常有效,因爲沒有選擇器操作。 'document.body'是一個已知的對象,所以它只是從該已知對象中檢索一個屬性。 'if($('#div')。length)'可能並不壞,因爲在內部,它將是一個'document.getElementById(「div」)'這是一個選擇器操作,但是它是更快的操作之一。如果你想比較兩者的性能,你必須對許多瀏覽器進行基準測試。 – jfriend00 2012-04-11 09:27:27

+0

太好了,謝謝你的解釋。 – madmatuk 2012-04-11 09:49:26