如何将对象添加到jQuery结果对象?

问题描述:

我不确定我是否在这里做错了什么,但我需要将几个对象的状态置于另一个状态之外。所以我基本上迭代父母,然后让他们的孩子和迭代他们来让他们的孩子等。但是,我不知道如何将jquery对象添加到jQuery结果对象。如何将对象添加到jQuery结果对象?

我的代码看起来是这样的(其中bubbleDown据说结果对象):

while (i < bubbleDown.length) { 
    var curRow = bubbleDown[i]; 
    child = curRow.getAttribute('class') //etc 
    parent = curRow.getAttribute('class') //etc 
    bubbleDown.add($('.' + child + ':not(.' + parent.replace(' ', '.') + ')')); 
    i++; 
} 

我已经隐藏了一些逻辑,它不是适用于我的问题所致。无论如何,它不起作用,并不是因为jquery无法返回对象。谁能帮忙?

+0

这是如此奇怪和困惑..我想把我的头撞到墙上! – jAndy 2010-07-12 12:30:40

+0

嘿,我正在使用这个类来跟踪亲子关系:o – 2010-07-12 12:37:06

+0

你想对元素做什么? – galambalazs 2010-07-12 12:42:20

最简单的方法是,.add()需要选择已经,刚刚使用过载和不断更新的参考对象使用the one .add() returns

var newBubbleDown = $(bubbleDown); 
while (i < bubbleDown.length) { 
    var curRow = bubbleDown[i]; 
    child = curRow.getAttribute('class') //etc 
    parent = curRow.getAttribute('class') //etc 
    newBubbleDown = newBubbleDown.add('.' + child + ':not(.' + parent.replace(' ', '.') + ')'); 
    i++; 
} 
//use newBubbleDown 

我不能把它简化任何进一步的,因为我不确定你的逻辑外,例如i来自哪里,什么childparent用于等,但只是拨打.add(selector),没有喂它一个jQuery对象,你都设置。

我们使用在这里,因为.add()一个新的对象返回到 jQuery对象的引用(你不使用一个),所以每个.add()添加元素,创建一个包含他们一个jQuery对象,那么它扔掉在下一个循环。相反,你需要更新参考,以便像你想要的那样保持积累的元素。例如,我倾向于将.add()实现更改为在我的大多数项目中对当前数组执行操作,因为这样会使您的原始代码更有用,例如)。

注:这将元素添加到newBubbleDown jQuery对象,但你的:not()使用使我不知道这是否会满足您的需求,它不会删除任何情况下,任何元素,它只会找到匹配该选择器的元素并将它们添加到数组中。如果您需要排除阵列中已有的元素,则需要.filter()

+0

这似乎没有添加任何东西到对象。 – 2010-07-12 12:51:16

+1

'.add'不会改变jQuery对象。它返回一个新的。 – 2010-07-12 12:54:44

+0

@Roatin - 好点...我实际上改变了'.add()'所以它*做* mutate(在大多数时候IMO更有用),我倾向于忘记API默认情况下不会这样做。 – 2010-07-12 13:00:10

你必须这样做在一个jQuery对象项目:

var curRow = $(bubbleDown[i]); 

,或者您可以使用each()方法:(而指数保持当前的项目索引)

bubbleDown.each(function(index){ 
    var child = $(this).attr('class')... 
    ... 
    bubbleDown.add(...); 
}); 

使用var来初始化你的变量,以避免IE出现问题。

+0

在这种情况下不对。 'bubbleDown [i]'返回DOM元素,并且代码在接下来的两行中针对该元素调用本地API方法。 – user113716 2010-07-12 12:36:07

+0

真的吗?不知道。也许它使用jquery – helle 2010-07-12 12:38:48

+0

helle - 你的新例子应该产生与问题相同的结果,不同之处在于你使用了'.append()',它用于将元素添加/移动到DOM中的某个点。 OP似乎希望将它们添加到正在迭代的同一个“bubbleDown”jQuery对象中。 – user113716 2010-07-12 12:44:40