Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.02.2018, 18:11
BNB BNB вне форума
Интересующийся
Отправить личное сообщение для BNB Посмотреть профиль Найти все сообщения от BNB
 
Регистрация: 09.02.2018
Сообщений: 27

Объект 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. Вот понять не могу почему так.
Ответить с цитированием
  #2 (permalink)  
Старый 18.02.2018, 18:27
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<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>
Ответить с цитированием
  #3 (permalink)  
Старый 18.02.2018, 18:31
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

И не забывайте сто скрипт выполняется сверху вниз, то есть если будете что-то присваивать до смены фона, присваиваться будет именно то значение которое было до смены.
Ответить с цитированием
  #4 (permalink)  
Старый 18.02.2018, 18:31
BNB BNB вне форума
Интересующийся
Отправить личное сообщение для BNB Посмотреть профиль Найти все сообщения от BNB
 
Регистрация: 09.02.2018
Сообщений: 27

Я хотел узнать почему в моем случае это не работает) У них же вроде объект style один на двоих и изменение в одном влечет изменение в другом, но тут этого не происходит.
Ответить с цитированием
  #5 (permalink)  
Старый 18.02.2018, 18:36
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от BNB Посмотреть сообщение
Я хотел узнать почему в моем случае это не работает) У них же вроде объект style один на двоих и изменение в одном влечет изменение в другом, но тут этого не происходит.
нет, вы сначала присваиваете значение, потом меняете цвет (так не прокатит)
Ответить с цитированием
  #6 (permalink)  
Старый 18.02.2018, 18:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от BNB
secondDiv.style = firstDivStyle;
видимо сам обьект style нельзя поменять и всегда будет только копирование/изменение в style предложенных свойств.
Ответить с цитированием
  #7 (permalink)  
Старый 18.02.2018, 18:43
BNB BNB вне форума
Интересующийся
Отправить личное сообщение для BNB Посмотреть профиль Найти все сообщения от BNB
 
Регистрация: 09.02.2018
Сообщений: 27

Ну так а почему не прокатывает?) 2 дива ссылаются на один и тот же объект style, значит при изменении свойств объекта style через любой из этих двух элементов оно должно распространяться сразу на оба дива. Я же присваиваю не само значение (объект style), а ссылку на этот объект style, получается у нас теперь есть 2 ссылки на объект style, через который мы можем менять его.
Ответить с цитированием
  #8 (permalink)  
Старый 18.02.2018, 18:46
BNB BNB вне форума
Интересующийся
Отправить личное сообщение для BNB Посмотреть профиль Найти все сообщения от BNB
 
Регистрация: 09.02.2018
Сообщений: 27

Ну пока да, приходиться также считать. Просто хотелось узнать именно почему он запрещает это делать, наверное в документации где-нибудь есть про это. Пойду искать
Ответить с цитированием
  #9 (permalink)  
Старый 18.02.2018, 18:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от BNB
2 дива ссылаются на один и тот же объект style
сеттер style не даст заменить обьект style, считайте что style "замороженный обьект" , свойства менять в нём можно, а сам обьект нет.
Ответить с цитированием
  #10 (permalink)  
Старый 18.02.2018, 18:49
BNB BNB вне форума
Интересующийся
Отправить личное сообщение для BNB Посмотреть профиль Найти все сообщения от BNB
 
Регистрация: 09.02.2018
Сообщений: 27

Понял, спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить объект в другой объект фонарик Общие вопросы Javascript 5 11.10.2015 01:57
Ищу функцию для canvas, которая будет перемещать мой объект на позицию х,у eko24 Events/DOM/Window 0 12.10.2013 00:33
Создать объект в объекте Bryant-24 Общие вопросы Javascript 3 10.07.2013 16:06
jQuery (Как открыть объект в этом же окне, щёлкнув по нему мышкой) Объект кусок карты hadzhimuratov (X)HTML/CSS 32 18.06.2012 17:54
Передать ссылку на объект а не объект возникновения события Blazze Events/DOM/Window 0 11.10.2011 00:45