Javascript.RU

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

Сообщение от jaroslav.tavgen
Почему "после"? "В" строке 4!
Нет, там вы скзали чтобы текст тега из переменной "А" поменялся на другой текст, при этом это действие не связано с переменной.
Ответить с цитированием
  #12 (permalink)  
Старый 25.03.2015, 15:21
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

http://learn.javascript.ru/basic-dom-node-properties

Цитата:
Можно и записать outerHTML, однако при этом новый текст будет вставлен вместо узла, а сама переменная не изменится.
Если что-то не понятно, сначала ищите в Учебнике, там, как правило, все написано.
Ответить с цитированием
  #13 (permalink)  
Старый 25.03.2015, 15:23
Кандидат Javascript-наук
Отправить личное сообщение для jaroslav.tavgen Посмотреть профиль Найти все сообщения от jaroslav.tavgen
 
Регистрация: 18.09.2014
Сообщений: 128

Сообщение от tsigel Посмотреть сообщение
Нет, там вы скзали чтобы текст тега из переменной "А" поменялся на другой текст, при этом это действие не связано с переменной.
Правильно ли я понимаю, что если бы браузер запрещал использовать необъявленные переменные, то на строке

id1.outerHTML = id1.outerHTML.replace('onclick="Function1()"', 'onclick="Function2()"');

он бы выдал ошибку из-за отсутствия "var id1.outerHTML;"?
Ответить с цитированием
  #14 (permalink)  
Старый 25.03.2015, 15:26
Кандидат Javascript-наук
Отправить личное сообщение для jaroslav.tavgen Посмотреть профиль Найти все сообщения от jaroslav.tavgen
 
Регистрация: 18.09.2014
Сообщений: 128

Сообщение от tsigel Посмотреть сообщение
http://learn.javascript.ru/basic-dom-node-properties



Если что-то не понятно, сначала ищите в Учебнике, там, как правило, все написано.
В том-то и дело, что в разделе "переменные" там нет ничего подобного даже близко. Просто написано, что их использовать просто как валенок и пару советов как их называть, и всё.
Ответить с цитированием
  #15 (permalink)  
Старый 25.03.2015, 15:28
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Сообщение от jaroslav.tavgen
Правильно ли я понимаю, что если бы браузер запрещал использовать необъявленные переменные, то на строке

id1.outerHTML = id1.outerHTML.replace('onclick="Function1()"', 'onclick="Function2()"');

он бы выдал ошибку из-за отсутствия "var id1.outerHTML;"?
Да он и так запрещает. Надо только строгий режим включить.

"use strict"
a = "b"
Ответить с цитированием
  #16 (permalink)  
Старый 25.03.2015, 15:31
Кандидат Javascript-наук
Отправить личное сообщение для jaroslav.tavgen Посмотреть профиль Найти все сообщения от jaroslav.tavgen
 
Регистрация: 18.09.2014
Сообщений: 128

Сообщение от tsigel Посмотреть сообщение
Да он и так запрещает. Надо только строгий режим включить.

"use strict"
a = "b"
Но не в этом случае:

<div id="id1" onclick="Function1()">Click on me</div>
<script>
"use strict"
var id1 = document.getElementById("id1");
id1.outerHTML = id1.outerHTML.replace('onclick="Function1()"', 'onclick="Function2()"');

alert(id1.outerHTML);

function Function1(){

    alert('Function1 is executed!');

}

function Function2(){

    alert('Function2 is executed!');

}


</script>
Ответить с цитированием
  #17 (permalink)  
Старый 25.03.2015, 15:37
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Сообщение от jaroslav.tavgen
Но не в этом случае:
Это вообще 2 разных случая. Ещё раз. Если сейчас не поймете - прочтите ЦЕЛИКОМ статью которую я кинул.

Вот Ваш код:
<div id="id1" onclick="Function1()">Click on me</div>
<script>
"use strict"
var id1 = document.getElementById("id1");
id1.outerHTML = id1.outerHTML.replace('onclick="Function1()"', 'onclick="Function2()"');

alert(id1.outerHTML);

function Function1(){

    alert('Function1 is executed!');

}

function Function2(){

    alert('Function2 is executed!');

}


</script>


В строке 4 вы записали в переменную "id1" ссылку на елемент.
В строке 5 Вы УДАЛИЛИ тег на который ссылалась переменная "id1" (при этом не удаляя переменную), и СОЗДАЛИ НОВЫЙ тег, ссылку на который вы НИКУДА не записывали. Оператор присвоения ("=") в данном случае никак не связан с вашей переменной! Он говорит чтобы вы записали НОВУЮ строку на место где находится Ваш элемент. После того как строка записана браузер понимает что это тег.

Последний раз редактировалось tsigel, 25.03.2015 в 15:40.
Ответить с цитированием
  #18 (permalink)  
Старый 25.03.2015, 15:51
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

Сообщение от jaroslav.tavgen
У этого языка программирования логика вообще есть?!
Тут дело не столько в языке, сколько в реализации, видимо.

Моя версия следующая. Когда ты меняешь outerHTML, он у тебя загружается в "виртуальную машину", а в исходнике он остается неизменным. Так вот, интерпретатор считывает outerHtml, похоже, из исходника, по-крайней мере в части между треугольными скобками. innerHTML все ж таки перерисовывается. Возможно это просто тупость имплементаторов, возможно, дрочево в присядку под компиляцию, чтобы меньше проходов делать. Но в любом случае, это ужасный косяк, да.

Последний раз редактировалось newuser1001, 25.03.2015 в 15:57.
Ответить с цитированием
  #19 (permalink)  
Старый 25.03.2015, 15:54
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

jaroslav.tavgen,
Советую обратить внимание на карму "Горного Троля" с ником "newuser1001", и не слушать бред который он извергает.
Ответить с цитированием
  #20 (permalink)  
Старый 25.03.2015, 15:54
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

теперь я попробую объяснить указатели))
никаких дум элементов, возьмем обычный массив, но в массиве может находиться еще один массив, смотрим:

var a = [1, 2, 3, [6, 7, 8]];
console.log(a);//посмотрим чему равна переменная a
console.log(a[0]);//теперь посмотрим чему равен 0ой элемент массива (= 1)
console.log(a[3]);//теперь посмотрим чему равен 3ий элемент массива (он ревен другому массиву)
//запишем в переменную b этот массив
var b = a[3]; //но что значит запишем в переменную b??? давай выведем
console.log(b); // = [6, 7, 8]
//теперь изменими значение какого то элемента массива
b[0] = -9;
console.log(b); //смотрим результат
console.log(a[3]);//а теперь смотрим на значение 3го элемента в массиве "а". чудо? две переменные ссылаются на 1 массив!!
a.splice(3, 1);//а теперь удалим из массива а 3ий элемент
console.log(a);//смотрим...
console.log(b);//а в b массив то сохранен
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
http://gigalit.info - Мои контакты Маэстро Ваши сайты и скрипты 70 08.12.2011 03:12
фрактальный сыр x-yuri Оффтопик 76 23.11.2011 21:59
О фрилансе (Личный опыт) free Оффтопик 105 18.08.2011 17:02
Как (эффективно) изучать JavaScript? JSTalker Общие вопросы Javascript 33 23.12.2010 03:13
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37