переменная не сохраняет кешированное значение после манипуляции? - PullRequest
0 голосов
/ 01 августа 2020

это, наверное, вопрос новичка. Я помещаю элемент в переменную, но кажется, что он изменился после манипуляций позже в коде.

$('#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, поскольку я сначала кэшировал элемент. Вместо этого условие оценивается как истинное. Что мне здесь не хватает? Спасибо.

1 Ответ

0 голосов
/ 01 августа 2020

Когда вы говорите «Сначала я кэшировал элемент», вы всего лишь указываете на него переменную (xxx). Затем вы указываете на него другую переменную (yyy). Затем вы переключаете класс в элементе. И xxx, и yyy вернут один и тот же измененный элемент. Переменные являются указателями, а не копиями родительского объекта, потому что вы ссылаетесь на составной объект:

Javascript имеет 5 типов данных, которые передаются по значению: Boolean, null, undefined, String. , и Number. Мы назовем эти примитивные типы. Javascript имеет 3 типа данных, которые передаются по ссылке: массив, функция и объект. Все это технически объекты, поэтому мы будем называть их вместе как Объекты

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

Что вам нужно для создания копии элементом является jQuery .clone () - так:

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

Тогда вы можете изменить элемент, не затрагивая xxx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...