2017-05-11 63 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