我不确定我在这里是否做错了什么,但我需要将多个对象的状态基于另一个对象的状态。所以我基本上是迭代 parent ,然后获取他们的 child ,然后迭代他们以获得他们的 child 等等。但是,我不知道如何将 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()
use 让我想知道这是否适合您的需求,在任何情况下它都不会删除任何元素,它只会找到与该选择器匹配的元素并将它们添加到数组中。如果需要排除数组中已有的元素,则需要 .filter()
.
关于javascript - 如何将对象添加到 jquery 结果对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3228470/