Javascript 如何向jquery结果对象添加对象?

Javascript 如何向jquery结果对象添加对象?,javascript,jquery,Javascript,Jquery,我不确定我是否在这里做错了什么,但我需要根据另一个对象的状态来确定几个对象的状态。所以我基本上是迭代父对象,然后得到它们的子对象,然后迭代它们得到它们的子对象等等。但是,我不知道如何将jquery对象添加到jquery结果对象上 我的代码如下所示(其中bubbleDown表示结果对象): while(i

我不确定我是否在这里做错了什么,但我需要根据另一个对象的状态来确定几个对象的状态。所以我基本上是迭代父对象,然后得到它们的子对象,然后迭代它们得到它们的子对象等等。但是,我不知道如何将jquery对象添加到jquery结果对象上

我的代码如下所示(其中bubbleDown表示结果对象):

while(i

我隐藏了一些逻辑,因为它不适用于我的问题。无论如何,它不起作用,这不是因为jquery无法返回对象。有人能帮忙吗?

您必须对jquery对象项执行此操作:

var curRow = $(bubbleDown[i]);
或者可以使用each()方法:(whileindex保存当前项索引)


例如,使用
var
初始化变量以避免IE出现问题。

最简单的方法是使用选择器,只需使用该重载并不断更新对要使用的对象的引用:

var newubbledown=$(bubbleDown);
而(i
我无法进一步简化它,因为我不确定您的外部逻辑,例如,
I
来自何处,以及
child
parent
用于什么,等等。但是只需调用,而不向它提供jQuery对象,就可以了

我们在这里使用一个新对象,因为
.add()
返回一个对新jQuery对象(您不使用的对象)的引用,所以每个
.add()
添加元素,创建一个包含它们的jQuery对象,然后在下一个循环中丢弃。相反,您需要更新引用,以便它继续累积您想要的元素。在我的大多数项目中,我倾向于更改
.add()
实现以作用于当前数组,因为这样做更有用(例如,可以使原始代码正常工作)


注意:这只会将元素添加到
newubbledown
jQuery对象,但您的使用让我怀疑这是否符合您的需要,它在任何情况下都不会删除任何元素,它只会找到与该选择器匹配的元素并将它们添加到数组中。如果需要排除数组中已有的元素,则需要。

这太奇怪了,太令人困惑了……我想把头撞到墙上!嘿,我用这个类来跟踪父子关系:你想对元素做什么?它是一个树。因此,当您折叠父元素时,它会检查子元素以使其也折叠。这里面有一些隐藏的逻辑。我之所以不能使用商业上可用的替代品,是有原因的,我必须从头开始构建这个。在这种情况下,这是不对的
bubbleDown[i]
返回DOM元素,代码在接下来的两行中针对该元素调用本机API方法。helle-您的新示例应该产生与问题相同的结果,只是您使用了
.append()
,用于将元素添加/移动到DOM中的某个点。OP似乎希望将它们添加到正在迭代的同一个
bubbleDown
jQuery对象中。helle-更好,但现在您实际上回到了原始代码,只需使用jQuery的
.attr()
而不是本机的
.getAttribute()
。没有错,但还没有解决问题;o) 这似乎没有向对象添加任何内容。
.add
不会改变jQuery对象。它返回一个新的。@Roatin-很好的一点…我实际上更改了
.add()
,所以它确实发生了变化(在我看来,大多数时候更有用),我倾向于忘记默认情况下API不会这样做。@Roatin-谢谢!我不知道这就是问题所在。。。像这样的误解是我以前遇到某些javascript问题的原因:)@Nick:你在本地修补jQuery函数吗?
var curRow = $(bubbleDown[i]);
bubbleDown.each(function(index){
    var child = $(this).attr('class')...
    ...
    bubbleDown.add(...);
});
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