Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объект style. (https://javascript.ru/forum/misc/72685-obekt-style.html)

BNB 18.02.2018 18:11

Объект style.
 
Вообщем, в body сделал 2 тестовых div-a:

<div id="first">
        Первый элемент.
</div>
  
<div id="second">
	Второй элемент.
</div>


И написал такой js код:

var firstDiv = document.getElementById("first");
var secondDiv = document.getElementById("second");
	
firstDivStyle = firstDiv.style;
	
secondDiv.style = firstDivStyle;
	
secondDiv.style.backgroundColor = "gray";


То есть объект style первого div-а присваиваю второму div-у и меняю свойство backgroundColor через style второго div-a.

Думал, что оба элемента приобретут фон серого цвета, т.к. в js когда мы присваиваем уже созданный объект в какую-либо переменную, то эта переменная получает ссылку на него (копия объекта не создается) и в памяти остается только один объект style на двоих. По идее, получается, что если мы будем менять style в любом из этих двух div-ов, то эти свойства будут распространяться и работать на этих двух div-ах, но в браузере у меня почему-то серым становится только второй div. Вот понять не могу почему так.

j0hnik 18.02.2018 18:27

<body>

<div id="first">
        Первый элемент.
</div>
  
<div id="second">
	Второй элемент.
</div>


<script>

var firstDiv = document.getElementById("first");
var secondDiv = document.getElementById("second");
	
secondDiv.style.backgroundColor = "gray";
firstDiv.style = secondDiv.style.cssText;

</script>

</body>

j0hnik 18.02.2018 18:31

И не забывайте сто скрипт выполняется сверху вниз, то есть если будете что-то присваивать до смены фона, присваиваться будет именно то значение которое было до смены.

BNB 18.02.2018 18:31

Я хотел узнать почему в моем случае это не работает) У них же вроде объект style один на двоих и изменение в одном влечет изменение в другом, но тут этого не происходит.

j0hnik 18.02.2018 18:36

Цитата:

Сообщение от BNB (Сообщение 478492)
Я хотел узнать почему в моем случае это не работает) У них же вроде объект style один на двоих и изменение в одном влечет изменение в другом, но тут этого не происходит.

нет, вы сначала присваиваете значение, потом меняете цвет (так не прокатит)

рони 18.02.2018 18:40

Цитата:

Сообщение от BNB
secondDiv.style = firstDivStyle;

видимо сам обьект style нельзя поменять и всегда будет только копирование/изменение в style предложенных свойств.

BNB 18.02.2018 18:43

Ну так а почему не прокатывает?) 2 дива ссылаются на один и тот же объект style, значит при изменении свойств объекта style через любой из этих двух элементов оно должно распространяться сразу на оба дива. Я же присваиваю не само значение (объект style), а ссылку на этот объект style, получается у нас теперь есть 2 ссылки на объект style, через который мы можем менять его.

BNB 18.02.2018 18:46

Ну пока да, приходиться также считать. Просто хотелось узнать именно почему он запрещает это делать, наверное в документации где-нибудь есть про это. Пойду искать

рони 18.02.2018 18:47

Цитата:

Сообщение от BNB
2 дива ссылаются на один и тот же объект style

сеттер style не даст заменить обьект style, считайте что style "замороженный обьект" , свойства менять в нём можно, а сам обьект нет.

BNB 18.02.2018 18:49

Понял, спасибо.


Часовой пояс GMT +3, время: 06:07.