如何将对象添加到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无法返回对象。谁能帮忙?
最简单的方法是,.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
来自哪里,什么child
和parent
用于等,但只是拨打.add(selector)
,没有喂它一个jQuery对象,你都设置。
我们使用在这里,因为.add()
一个新的对象返回到新 jQuery对象的引用(你不使用一个),所以每个.add()
添加元素,创建一个包含他们一个jQuery对象,那么它扔掉在下一个循环。相反,你需要更新参考,以便像你想要的那样保持积累的元素。例如,我倾向于将.add()
实现更改为在我的大多数项目中对当前数组执行操作,因为这样会使您的原始代码更有用,例如)。
注:这将仅元素添加到newBubbleDown
jQuery对象,但你的:not()
使用使我不知道这是否会满足您的需求,它不会删除任何情况下,任何元素,它只会找到匹配该选择器的元素并将它们添加到数组中。如果您需要排除阵列中已有的元素,则需要.filter()
。
这似乎没有添加任何东西到对象。 – 2010-07-12 12:51:16
'.add'不会改变jQuery对象。它返回一个新的。 – 2010-07-12 12:54:44
@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出现问题。
在这种情况下不对。 'bubbleDown [i]'返回DOM元素,并且代码在接下来的两行中针对该元素调用本地API方法。 – user113716 2010-07-12 12:36:07
真的吗?不知道。也许它使用jquery – helle 2010-07-12 12:38:48
helle - 你的新例子应该产生与问题相同的结果,不同之处在于你使用了'.append()',它用于将元素添加/移动到DOM中的某个点。 OP似乎希望将它们添加到正在迭代的同一个“bubbleDown”jQuery对象中。 – user113716 2010-07-12 12:44:40
这是如此奇怪和困惑..我想把我的头撞到墙上! – jAndy 2010-07-12 12:30:40
嘿,我正在使用这个类来跟踪亲子关系:o – 2010-07-12 12:37:06
你想对元素做什么? – galambalazs 2010-07-12 12:42:20