2013-07-10 81 views
2

我想为某个类传递多个对象的数字。这里的一块我想对在一个参数中传递多个参数的对象

group: function(number) { 
     for(var i=0;i<number.length;i++){ 
     groups=number[i]; 
    $('.group')[groups].remove(); 
    } 
    } 

工作,我想使它所以它就像

code.destroy.group(0,1,2); 

这将完成将删除$('.group')[0]$('.group')[1]$('.group')[2]

我的预览必须做到这一点错误,否则这将工作正常。有人能带我走上正确的道路吗?

感谢费利克斯·金领导我在正确的道路:

我不得不这样做的是使用的参数参数

group: function() { 
    for(var i=0;i<arguments.length;i++){ 
     $('.sceditor-group')[arguments[i]].remove(); 
    } 
    } 
+0

我将看看这位菲利克斯,无论情况如何,你总是很高兴地看到你,因为你总是把我引向正确的道路。希望这是正确的道路。 – EasyBB

+0

@FelixKling如果你想添加一个答案,所以我可以upvote,这是一个巨大的帮助!非常感谢! – EasyBB

+0

我很高兴我可以帮助:)只要upvote在其他问题的答案,如果它帮助你。 –

回答

1

您的逻辑存在问题,那就是因为您在循环的每次迭代中删除了匹配集的元素,所以不会删除索引为0,1的初始元素(在这种情况下你最终会删除原始集合中的元素0,2 & 4)。另外,您在每次迭代时都会调用$('.group'),这不是最优的,而是如果利用缓存变量的优势,然后逐个添加所需的元素,那么您可以在结果集上调用remove。

您可以将您的功能更改为:

group: function(number) { 
     var $current = $(); 
     var $group = $('.group'); 
     for(var i=0;i<number.length;i++){ 
     $current = $current.add($group.eq(number[i])); 
     } 
     $current.remove(); 
} 

编辑:考虑SLaks回答和arguments,而不是预期的阵列的使用,你可以做这样的:

group: function() { 
     var $current = $(); 
     var $group = $('.group'); 
     for(var i=0;i<arguments.length;i++){ 
     $current = $current.add($group.eq(arguments[i])); 
     } 
     $current.remove(); 
} 
+0

我会用这个,所以基本上你说参数参数不好,然后 – EasyBB

+2

你也可以在循环之前选择所有'.group'元素(而不是在循环中选择它们)。然后你所要做的就是'$ current = $ current.add($ groups [arguments [i]]);' –

+1

@EasyBB我认为'arguments'很好,看到我更新的答案... – DarkAjax

2

的jQuery对象是包含原始DOM元素阵列状物体。

因此,$(...)[0]是一个原始的DOM元素,而不是一个jQuery对象。

要获取特定元素的jQuery对象,请致电.eq()


编辑:你也在寻找特殊arguments阵列状物体,它可以遍历得到所有的传递给你的函数的参数。

+0

上述代码适用于一个参数,但对于多个它不,所以我不得不在一些正确的道路上没有。 – EasyBB

+0

@EasyBB:你是什么意思? – SLaks

+0

@EasyBB:这听起来像你实际上要求'arguments'变量。 – SLaks