从DOM中删除类也会将其从变量中的项目中删除

时间:2013-07-24 17:40:14

标签: javascript jquery dom

当我使用

$('span').removeClass('reallyRed');

从DOM中删除一个类,它就是这样做的。好极了!但是,如果我将HTML元素推送到myVar.push(this)的变量中,那么.removeClass()也会在myVar中找到这些类,并将它们从变量中删除!

Here is the JSFiddle。为什么会这样?我怀疑它与jQuery如何看待DOM有关,但可能是我在.push()循环中使用.each()的问题。

1 个答案:

答案 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函数的原因。

来自documentation

.clone()

  

创建匹配元素集的深层复制

您的javascript代码变为:

$('div').each(function(e) {
    myVar.push($(this).clone()[0]);
});

JSFIDDLE