Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#23 used as offset, casting to integer (23) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#25 used as offset, casting to integer (25) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: DocumentObject.param=Array
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


 Страниц (1): [1] 

> Без описания
kr12
Отправлено: 11 Июня, 2006 - 10:42:17
Post Id


Member


Покинул форум
Сообщений всего: 136
Дата рег-ции: Март 2005  

Карма 0




CODE:

<script>String.prototype.c=function(color){return '<font color="'+(color||'#ccdddc')+'"> '+this.toString()+' </font>'}</script>
<body>
<hr id=q><!-- или любой др. --><BR>
<script>
document.getElementById('q').E=[2,1];
document.body.innerHTML+=document.getElementById('q').E+' до innerHTML<BR>'.c('#cccccc')
document.body.innerHTML+=document.getElementById('q').E+' после<BR><BR>'.c('#cccccc')

document.getElementById('q').E=0;
document.body.innerHTML+=document.getElementById('q').E+' до innerHTML<BR>'.c('#cccccc')
document.body.innerHTML+=document.getElementById('q').E+' после<BR>'.c('#cccccc')
</script>

Почему так, что посоветуете.
(В IE: [2,1] undef 0 0)
 
 Top
ETC Администратор
Отправлено: 11 Июня, 2006 - 12:47:23
Post Id



Flash-coder


Покинул форум
Сообщений всего: 5275
Дата рег-ции: Дек. 2003  
Откуда: TimeZero

Карма 26




а ты что, строки и массивы вот так вот не стесняясь объединяешь?
 
 Top
kr12
Отправлено: 11 Июня, 2006 - 18:20:02
Post Id


Member


Покинул форум
Сообщений всего: 136
Дата рег-ции: Март 2005  

Карма 0




Какие еще строки? Моя твоя непонимать.. 8(
Я говорю фишка в том, что некий объект (из DOM) получает параметр - массив и все нормально с ним работает до вызова метода innerHTML, а после этого добавленные свойства пропадают (в IE остаются свойства, не являющиеся массивами и методами)
 
 Top
Леголегс Администратор
Отправлено: 12 Июня, 2006 - 03:25:24
Post Id



JS-маньяк


Покинул форум
Сообщений всего: 2109
Дата рег-ции: Июль 2004  
Откуда: Липецк

Карма 17




ETC пишет:
а ты что, строки и массивы вот так вот не стесняясь объединяешь?
Не придирайся, toString() автоматически вызывается.
kr12 пишет:
Какие еще строки?
Соединяешь строку с массивом. Оно конечно как я уже сказал автоматически преобразуется, но автоматика - капризная штука Улыбка
kr12 пишет:
работает до вызова метода innerHTML, а после этого добавленные свойства пропадают
Угу. Ведь ты измениешь исходный html код и браузеру приходится его парсить заново, неудивительно, что он что-то теряет. Можно использовать узлы вместо innerHTML:
CODE:

<hr id=q><!-- или любой др. --><BR>
<script>
document.getElementById('q').E=[2,1];
var text1 = document.createTextNode(document.getElementById('q').E);
var text2 = document.createTextNode(' до appendChild');
var font = document.createElement("font");
font.color='#cccccc';
font.appendChild(text2);
var br = document.createElement("br");
document.body.appendChild(text1);
document.body.appendChild(font);
document.body.appendChild(br);

text1 = document.createTextNode(document.getElementById('q').E);
text2 = document.createTextNode(' после');
var font = document.createElement("font");
font.color='#cccccc';
font.appendChild(text2);
br = document.createElement("br");
document.body.appendChild(text1);
document.body.appendChild(font);
document.body.appendChild(br);
</script>

 
 Top
Дмитрий Б.
Отправлено: 12 Июня, 2006 - 07:16:30
Post Id



Super Member


Покинул форум
Сообщений всего: 800
Дата рег-ции: Март 2005  
Откуда: Иркутск

Карма 0




Леголегс
Согласен по всем пунктам. Но добавлю пару от себя.

kr12
1. Оператор
CODE:
document.body.innerHTML+=...
это сокращённая версия вот такого:
CODE:
document.body.innerHTML=document.body.innerHTML+...
Как ты понимаешь, во втором, а значит, и в первом случае браузер выполняет присваивание некоторой строки содержимому тега <body>. Присваивание означает замещение старого значения новым. После этого от той части старой объектной модели, которая порождалась прежними тегами в <body>, не осталось и следа, не говоря уже о добавленных свойствах. Смотри:
CODE:
<html>
<body>
<script>String.prototype.c=function(color){return '<font color="'+(color||'#ccdddc')+'"> '+this.toString()+' </font>'}</script>
<body>
<hr id=q><!-- или любой др. --><BR>
<script>
var a=document.getElementById('q');
document.getElementById('q').E=[2,1];
document.body.innerHTML+=document.getElementById('q').E+' до innerHTML<BR>'.c('#cccccc')
document.body.innerHTML+=document.getElementById('q').E+' после<BR><BR>'.c('#cccccc')

var b=document.getElementById('q');
document.getElementById('q').E=0;
document.body.innerHTML+=document.getElementById('q').E+' до innerHTML<BR>'.c('#cccccc')
document.body.innerHTML+=document.getElementById('q').E+' после<BR>'.c('#cccccc')

var c=document.getElementById('q');

document.body.innerHTML+='<hr>a==b: '+(a==b)+'<BR>a==c: '+(a==c)+'<BR>b==c: '+(b==c);
</script>
</body>
</html>
Этот код 3 раза выдаёт значение false, т. е. ссылки, сохранённые в переменных a, b и c, не совпадают.

2. Тот метод, что с таким блеском продемонстрировал Леголегс, оперирует напрямую с объектной моделью документа, т. е. он добавляет новые элементы, никак не влияя на старые (не считая, конечно, свойств, отвечающих за иеархию объектов). В твоём случае я бы воспользовался старым-добрым методом document.write(). Если же тебе надо выполнять подобные преобразования апосля загрузки документа (по поступлении события либо через некоторый промежуток времени) - делай так, как сказал Леголегс, либо же храни свои массивы в глобальных переменных...
 
 Top
kr12
Отправлено: 16 Июня, 2006 - 20:55:45
Post Id


Member


Покинул форум
Сообщений всего: 136
Дата рег-ции: Март 2005  

Карма 0




Все теперь ясно, всем спасибо.
ЗЫ: Я вот теперь подумал, что при можно желании оптимизировать JS графику..
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0)
« JavaScript »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0427]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33