我希望能够按每次点击的第n个间隔切片我的div。所以对于这个例子,每次我点击,我希望我的函数切片前三个div并隐藏它们。如果我再次点击,则隐藏其余三个div。
$(document).on('click', '#dinner', function(){
var command = $(this).parents('#theworld');
var findpizza = command.find('.pizza');
for (var i = 0; i < findpizza.length; i+=3){
findpizza.slice(0, 3).hide();}
});
的jsfiddle: https://jsfiddle.net/crhggho5/
我不想使用删除,因为这会使div隐藏永久性。我也不想使用display:none
因为它使div仍然可见,并且在第一次单击后它将不执行任何操作。
答案 0 :(得分:2)
我看到你试图用一个类来隐藏div。这就是我要做的。这样,您可以使用选择器中的.gone
类来排除在再次点击事件侦听器时已隐藏的类:
$(document).on('click', '#dinner', function(){
var command = $(this).parents('#theworld');
//only get the slices that are not hidden
var findpizza = command.find(".pizza:not('.gone')");
for (var i = 0; i < findpizza.length; i+=3){
//hide the slices via a class with 'display: none'
findpizza.slice(0, 3).addClass('gone');
}
});
答案 1 :(得分:2)
只需创建2个索引即可跟踪sliceStart
&amp; sliceEnd
。
在每个切片循环后,将sliceEnd
设置为sliceStart
索引以寻找div。
JS CODE:
var sliceStart = 0;
var sliceEnd = 3;
$(document).on('click', '#dinner', function() {
var command = $(this).parents('#theworld');
var findpizza = command.find('.pizza');
if (sliceStart != sliceEnd) {
findpizza.slice(sliceStart, sliceEnd).hide();
sliceStart = sliceEnd;
sliceEnd += sliceEnd;
return;
}
//detach the click event when job is done to
//avoid unnecessary event handling
if (sliceStart === totalDivs) {
$(document).off('click');
}
});
注意:FYI jquery .hide()
在内部将CSS样式disply:none
设置为目标元素,因此它与将CSS样式disply:none
手动设置为所有各自的元素