当我使用
时$('span').removeClass('reallyRed');
从DOM中删除一个类,它就是这样做的。好极了!但是,如果我将HTML元素推送到myVar.push(this)
的变量中,那么.removeClass()
也会在myVar
中找到这些类,并将它们从变量中删除!
Here is the JSFiddle。为什么会这样?我怀疑它与jQuery如何看待DOM有关,但可能是我在.push()
循环中使用.each()
的问题。
答案 0 :(得分:4)
使用clone()
函数将元素推送到变量时复制元素:
myVar.push($(this).clone()[0]);
我们举一个例子:
var obj = {
"key1": "val1",
"key2": "val2",
"key3": "val3"
};
var array = [];
array.push(obj);
console.log(obj); // { "key1": "val1", "key2": "val2", "key3": "val3"}
delete array[0].key1;
console.log(obj); // { "key2": "val2", "key3": "val3"}
这种情况正在发生,因为该对象具有相同的引用(删除第一个键后和之前的array[0] === obj
)。
这就是你需要clone()
jQuery函数的原因。
.clone()
创建匹配元素集的深层复制。
您的javascript代码变为:
$('div').each(function(e) {
myVar.push($(this).clone()[0]);
});