2010-08-25 36 views
0

我有一个包含一堆html表格的div(#thelist)。当鼠标滚轮旋转时,我想要将第一个桌子移除并添加到底部。 (反过来,如果车轮转向另一个方向)。如何根据鼠标滚轮在jQuery中更改多个表的顺序?

出于某种原因,下面的代码也起作用,从我的理解中,列表应该变得越来越长。因为我不明白它为什么这样工作,所以我不能让它以其他方式工作...

任何帮助吗?谢谢!!!

$("#thelist").bind("mousewheel",function(ev, delta) 
{ 
    if (delta > 0) 
    { 
     var children = $("#thelist").children('table'); 
     var tmpChild = children[0]; 
     children.push(tmpChild); 
    } 

    if (delta < 0) 
    { 
     // How to do this, btw ? 
    } 


    $("#thelist").html(children); 
} 

回答

0

pop()方法应该由一个删除条目的阵列之一,并添加splice()(见EDIT)他们到顶端:

if(delta < 0){ 
    var child = children.pop(); 
    children.unshift(child); 
} 

而且你应该把孩子们的声明和初始化if之前的陈述。 和使用,如果if/else语句

$("#thelist").bind("mousewheel",function(ev, delta) { 
    var children = $("#thelist").children('table'); 

    if (delta > 0){ 
     var tmpChild = children[0]; 
     children.push(tmpChild); 
    }else if (delta < 0) { 
     var tmpChild = children.pop(); 
     children.unshift(tmpChild); 
    } 

    $("#thelist").html(children); 
} 

编辑:
你应该使用的unshift()代替splice()

0

我不知道怎么会工作,要么,但它可以被清理稍微使用Javascript Array方法。

pop - 从数组中删除最后一项并返回。

push - 将项目添加到列表的末尾。

shift - 从数组中移除第一项并返回。

unshift - 将项目添加到列表的开头。

所以,你的代码看起来像:

var children = $("#thelist").children('table'); 

if(delta > 0) 
{   
    var tmpChild = children.shift(); 
    children.push(tmpChild); 
} 
if(delta < 0) 
{ 
    var tmpChild = children.pop(); 
    children.unshift(tmpChild); 
} 
0

我会去这样的事情,更清楚地表达了我们的意图,“走#thelist的第一个孩子,并把它放在#结束的thelist”

$("#thelist").bind("mousewheel",function(ev, delta) 
{ 
    var list = $("#thelist"); 
    if (delta > 0) 
    { 
     list.children('table').first().appendTo(list); 
    } 

    if (delta < 0) 
    { 
     list.children('table').last().prependTo(list); 
    } 
}); 

我怀疑,这也可能是有点更有效,因为它只是重新安排现有的DOM元素,而不是调用html()更新列表的全部内容。但效果可能可以忽略不计。