2017-05-11 79 views
0

我在創建類別過濾器時遇到了一些麻煩,我嘗試了jQuery中的所有不同事物,我認爲這應該是最好的方式來得到我想要的。jQuery .detach/append in if/else語句

代碼:

var divs; 

$('.category').on('click', function() { 
    if(divs == 1) { 
     alert('ayylmao?'); 
     $('section#showcase').append(detached); 
     divs = 0; 
    } else { 
     divs = 1; 
     var lolxd = $(this).find('a').attr('id'); 
     alert(lolxd); 
     var detached = $('section#showcase').contents().not("." + lolxd).detach(); 
    } 
}); 

它已經有一段時間以前,我用jQuery的,但由於某些原因「分離」的變種不會追加到部分展示。

想聽聽我做錯了什麼; _;

+2

我想因爲你的變量'detached'只是函數的本地函數,所以一旦你的'divs'值爲1,'detached'不確定,試着在你的'if' – Lixus

+1

''中做一個'console.log', var divs,detached;','detached = $('section#showcase')。contents()。not(「。」+ lolxd).detach()' – guest271314

+0

oke yep,它表示未定義。任何想法,我應該改變什麼? – kid

回答

1

detached宣佈您的點擊處理函數。這意味着每次運行該函數時都會重新創建它。

與您在使用divs時聲明的不同,後者在函數之外聲明並因此存在於函數調用中。

有很多方法來解決這個問題,但最簡單的將遵循您爲divs相同的模式,並有一些代碼看起來是這樣的:

var divs; 
var detached; 
$('.category').on('click', function() { 
    if(divs == 1) { 
     alert('ayylmao?'); 
     $('section#showcase').append(detached); 
     divs = 0; 
    } else { 
     divs = 1; 
     var lolxd = $(this).find('a').attr('id'); 
     alert(lolxd); 
     detached = $('section#showcase').contents().not("." + lolxd).detach(); 
    } 
}); 

說到更普遍,這聽起來像時你分開一個陳列櫃,你想保留它,這樣你可以稍後添加它。根據您的程序構成,將該項目的display更改爲none可能更有用。但是,如果您有多件事情可以附加到陳列室,這確實會改變語義。

+0

葉問題是我每3,4th和第五項使用第n個孩子。也感謝幫助它現在幾乎正常工作(: – kid