2012-12-14 71 views
4

假設我有以下jQuery代碼。它工作的很好,但只有在var insertAfter等於true的情況下,我才需要包含.after($('<div />'))。有沒有一個優雅的jQuery的方式來做到這一點?jQuery條件鏈接

$('#whatEver') 
    .parent() 
    .show() 
    .width(123) 
    .addClass('bebo') 
    .before($('<div />')) 
    .after($('<div />')) 
    .parent() 
    .addClass('bla'); 

回答

6

試試這個使用三元運算符:

.after(insertAfter ? $('<div />') : '') 
+0

感謝antyrat,正想着這一點。任何將'''插入到DOM中的問題? – user1032531

+0

jQuery'after'方法接受字符串,所以它不會插入任何東西;) – antyrat

0
+0

我理解三元運算符並確定變量是否已定義。我的不確定性在於是否可以根據條件完全消除after()方法。 – user1032531

+0

從我看到的情況來看,這不是你的問題所要求的,你需要對它重新進行描述,因爲消除是一個完全不同的概念,任何人都可以被拒絕投票,如果他們提出不適當的答案,除了目前正在進行的工作以外的其他任何東西 – iOSAndroidWindowsMobileAppsDev

+0

我認爲我的原始問題很清楚,但是我對您的帖子的評論不是。基於某些條件,我的意思是,甚至不要「after()」來執行「消除」。 – user1032531

1

可以擴展jQuery庫是這樣的:

$(function() { 
    $.fn.afterif = function (param, condition) { 
     if (condition) { 
      $(this).after(param); 
     } 
     return this; 
    } 
}(jQuery)); 

而且使用這樣的:

var insertAfter = true; 
$('#whatEver').afterif($('<div />'), insertAfter); 
+0

您不返回'this',所以在調用函數後,您將無法使用此元素。只有在再次訪問它之後。 – antyrat

+0

感謝@antyrat,我已經更新了我的答案。 –

+0

更好的方法是在返回之前將所有內容都包含在'this.each'中,這樣您就可以使用此選擇器來操作所有節點,而不僅僅是第一個。我的意思是'返回this.each(function(){' – antyrat