25.03.2015, 15:18
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
Сообщение от jaroslav.tavgen
|
Почему "после"? "В" строке 4!
|
Нет, там вы скзали чтобы текст тега из переменной "А" поменялся на другой текст, при этом это действие не связано с переменной.
|
|
25.03.2015, 15:21
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
http://learn.javascript.ru/basic-dom-node-properties
Цитата:
|
Можно и записать outerHTML, однако при этом новый текст будет вставлен вместо узла, а сама переменная не изменится.
|
Если что-то не понятно, сначала ищите в Учебнике, там, как правило, все написано.
|
|
25.03.2015, 15:23
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
Сообщение от tsigel
|
Нет, там вы скзали чтобы текст тега из переменной "А" поменялся на другой текст, при этом это действие не связано с переменной.
|
Правильно ли я понимаю, что если бы браузер запрещал использовать необъявленные переменные, то на строке
id1.outerHTML = id1.outerHTML.replace('onclick="Function1()"', 'onclick="Function2()"');
он бы выдал ошибку из-за отсутствия "var id1.outerHTML;"?
|
|
25.03.2015, 15:26
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
В том-то и дело, что в разделе "переменные" там нет ничего подобного даже близко. Просто написано, что их использовать просто как валенок и пару советов как их называть, и всё.
|
|
25.03.2015, 15:28
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
Сообщение от jaroslav.tavgen
|
Правильно ли я понимаю, что если бы браузер запрещал использовать необъявленные переменные, то на строке
id1.outerHTML = id1.outerHTML.replace('onclick="Function1()"', 'onclick="Function2()"');
он бы выдал ошибку из-за отсутствия "var id1.outerHTML;"?
|
Да он и так запрещает. Надо только строгий режим включить.
"use strict"
a = "b"
|
|
25.03.2015, 15:31
|
Кандидат Javascript-наук
|
|
Регистрация: 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>
|
|
25.03.2015, 15:37
|
Профессор
|
|
Регистрация: 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.
|
|
25.03.2015, 15:51
|
Аспирант
|
|
Регистрация: 24.03.2015
Сообщений: 92
|
|
Сообщение от jaroslav.tavgen
|
У этого языка программирования логика вообще есть?!
|
Тут дело не столько в языке, сколько в реализации, видимо.
Моя версия следующая. Когда ты меняешь outerHTML, он у тебя загружается в "виртуальную машину", а в исходнике он остается неизменным. Так вот, интерпретатор считывает outerHtml, похоже, из исходника, по-крайней мере в части между треугольными скобками. innerHTML все ж таки перерисовывается. Возможно это просто тупость имплементаторов, возможно, дрочево в присядку под компиляцию, чтобы меньше проходов делать. Но в любом случае, это ужасный косяк, да.
Последний раз редактировалось newuser1001, 25.03.2015 в 15:57.
|
|
25.03.2015, 15:54
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
jaroslav.tavgen,
Советую обратить внимание на карму "Горного Троля" с ником "newuser1001", и не слушать бред который он извергает.
|
|
25.03.2015, 15:54
|
Профессор
|
|
Регистрация: 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 массив то сохранен
|
|
|
|