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

时间:2010-07-12 12:25:40

标签: javascript 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无法返回对象。有人可以帮忙吗?

2 个答案:

答案 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来自哪里,childparent用于什么,等等。但是只需调用.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出现问题。