我不确定我是否在这里做错了,但是我需要将几个对象的状态从另一个对象的状态开始。所以我基本上是迭代父母,然后让他们的孩子迭代他们让他们的孩子等。但是,我不知道如何将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 :(得分:2)
最简单的方法是.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()
返回对 new jQuery对象(你没有使用的对象)的引用,所以每个.add()
都添加了元素,创建一个包含它们的jQuery对象,然后在下一个循环中抛弃它。相反,您需要更新引用,以便它继续累积您想要的元素。我倾向于将.add()
实现更改为在我的大多数项目中对当前数组执行操作,因为它会使原始代码工作的方式更有用。例如)。
注意:这将仅向newBubbleDown
jQuery对象添加元素,但是:not()
使用让我想知道这是否适合您的需要,在任何情况下都不会删除任何元素,它只会找到与该选择器匹配的元素并将它们添加到数组中。如果您需要排除数组中已有的元素,则需要.filter()
。
答案 1 :(得分:0)
你必须在jquery-object项上执行此操作:
var curRow = $(bubbleDown[i]);
或者你可以使用each()方法:(索引保存当前项目索引)
bubbleDown.each(function(index){
var child = $(this).attr('class')...
...
bubbleDown.add(...);
});
使用var
初始化变量以避免IE出现问题。