变量在操作后不保留缓存的值?

时间:2020-08-01 11:44:31

标签: jquery

这可能是初学者的问题。我在变量中添加了一个元素,但似乎稍后在代码中对其进行了更改。

$('#toggle-links a').click(function() {

var prnt = $(this).parent();
var xxx = prnt.prev();
console.log(xxx);

prnt.prev().toggleClass('_hidden');
var yyy = $(this).parent().prev();

if (xxx.hasClass('_hidden')) {
    console.log(yyy);
    console.log('aa');
} else {
    console.log(xxx);
    console.log('bb');
}   
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="main" class="abc">
</div>
<div id="toggle-links"><a>click</a></div>

单击链接后,我希望(在我通过切换类操作元素之后)检查xxx是否具有类会返回false,因为我先缓存了元素。而是条件评估为true。我在这里想念的是什么?谢谢。

1 个答案:

答案 0 :(得分:0)

当您说“我先缓存元素”时,您所做的只是指向变量(xxx)。然后,将另一个变量(yyy)指向它。然后,您在元素中切换类。 xxx和yyy都将提供相同的更改元素。变量是指向父级的指针,而不是父级的副本,因为您引用的是复合对象:

Javascript具有按值传递的5种数据类型:布尔值,空值,未定义,字符串和数字。我们将这些原始类型称为。 Javascript具有3种通过引用传递的数据类型:数组,函数和对象。从技术上讲,这些都是对象,因此我们将它们统称为对象

https://codeburst.io/explaining-value-vs-reference-in-javascript-647a975e12a0

您需要复制元素的是jQuery的.clone()-所以:

var xxx = prnt.prev().clone();

然后,您可以更改元素而不会影响xxx。