2010-01-15 60 views
3

比方說,我有jQuery的以下內容:加入「如果」的邏輯來一個jQuery鏈

// pseudocode : 
$(this) 
    .doSomething 
    .doSomething 
    .selectSomething 
     .doSomething 
     .animate({ 
      opacity: 1 
     }, 150) 
     .end() 
    .selectSomethingElse 
     .doSomething 

我想上面的執行。但是,如果瀏覽器是IE瀏覽器,我不希望執行動畫部分(由於IE無法使用透明PNG爲對象製作動畫並保留PNG透明度)。

是否有無論如何維護良好的鏈式jQuery語法,但不知何故跳過基於一些邏輯(在這種情況下測試IE瀏覽器)的動畫部分?

回答

6

你可以做一個each()並傳遞一個函數來處理動畫,它應該工作。

$(this) 
    .doSomething 
    .doSomething 
    .selectSomething 
     .doSomething 
     .each(function() { 
      // Will return false on IE, true on others 
      if(jQuery.support.opacity) { 
       $(this).animate({ 
        opacity: 1 
       }, 150); 
      } 
     })   
    .end() 
.selectSomethingElse 
    .doSomething 
+0

啊哈!是!這會很好地工作。 – 2010-01-15 21:48:27

0

我不得不的代碼本之前的塊,其檢查IE和,如果發現,除去任何選擇器的第一個「.selectSomething」是使用。或者,稍微修改.selectSomething,以便檢查僅存在於非IE瀏覽器中的其他類。

它有助於保持瀏覽器檢測邏輯的獨立性。

+0

是的,插入一個額外的類似乎是一個選項,但需要更多的遍歷jQuery鏈中。我不想排除整個模塊,因爲我希望所有模塊都可以執行,無論瀏覽器如何,除了鏈條的一部分。 – 2010-01-15 21:47:54

1

您可以使用filter過濾掉IE:

$(this).filter(function() { 
    return $.support.opacity; 
}).animate({ 
    opacity: 1 
}, 150);