Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.10.2007, 18:03
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 21  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от __etc
Полный код, пожалуйста.
Потому как я не понял, как решится проблема с nodeValue:
Я отвечал на код Ведьмака в посте 6
Код:
while (XMLmenu.firstChild.childNodes[i]) {
Он прервется, если попадется текстовый узел

А если код как у Mnilionic
Код:
var node = xml.firstChild.firstChild;
while(node){
	trace("значение: " + node.firstChild.nodeValue);
	node = node.nextSibling;
То конечно будет полный обход

add

Цитата:
Сообщение от __etc
А вот заодно тест...
Даже со всеми оптимизациями обычный перебор через for медленее в полтора с лишним раза.
C оптимизацией будет так:

Код:
for (node = xml.firstChild.firstChild; node; node = node.nextSibling) {
Собственно об этом Гурский и писал.


Последний раз редактировалось chingachgoog; 09.10.2007 в 18:14.
Старый 09.10.2007, 18:13
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 22  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Хм.

Код:
var str = "<block><item>1</item><![CDATA[2]]><item>3</item></block>";
var xml = new XML();
xml.ignoreWhite = true;
xml.parseXML(str);

var node = xml.firstChild.firstChild;
while (node) {
	trace("A: "+(node.nodeValue || node.firstChild.nodeValue));
	node = node.nextSibling;
}
i = 0;
while (xml.firstChild.childNodes[i]) {
	node = xml.firstChild.childNodes[i];
	trace("B: "+(node.nodeValue || node.firstChild.nodeValue));
	i++;	
}
А for-таки медленнее.

Старый 09.10.2007, 18:18
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 23  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
А где тут for?

если это у вас
Код:
i = 0;
while (xml.firstChild.childNodes[i]) {
	node = xml.firstChild.childNodes[i];
	trace("B: "+(node.nodeValue || node.firstChild.nodeValue));
	i++;
то см. оптимизацию выше.

Старый 09.10.2007, 18:25
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 24  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Так, стоп. Я отвечал насчет поста Ведьмака про текстовый тег. Никуда ничего не прерывается.

Старый 09.10.2007, 18:32
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 25  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Значит в хелпе ошибка?
Цитата:
This property [XML.childNodes] is undefined for text nodes (nodeType == 3).

Старый 09.10.2007, 18:36
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 26  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цикл не прервется, просто трейс в коде Ведьмака выдаст undefined на текстовом ноде и все. Если надо получить значение нода или его ребенка, то пример я написал выше.

Старый 09.10.2007, 18:39
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 27  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
В том-то и дело, если бы выдало undefined, то цикл прервался бы, но undefined не выдается.
Видимо в хелпе имелось ввиду, что у самого текстового узла, если к нему (к текстовому узлу) применить childNodes, будет выдаваться undefned.

За пример спасибо, такого я еще не встречал:
Код:
a=234
b=undefined

trace(a || b)
Почему-то был уверен, что должна выдаваться булевая величина, ан нет...


Последний раз редактировалось chingachgoog; 09.10.2007 в 18:43.
Старый 09.10.2007, 18:43
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 28  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Нет, в коде Ведьмака трейсится childNodes текущего нода. А в цикле идет перебор childNodes родителя. Никакой ошибки в хелпе и в коде нет.

Старый 09.10.2007, 18:49
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 29  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Код:
var str = "<block><item>1</item><![CDATA[2]]><item>3</item></block>";
var xml = new XML();
xml.ignoreWhite = true;
xml.parseXML(str);

var node = xml.firstChild.firstChild;

i = 0;
while (xml.firstChild.childNodes[i]) {
	trace(xml.firstChild.childNodes[i].nodeType+" "+xml.firstChild.childNodes[i])
	node = xml.firstChild.childNodes[i];
	//trace("B: "+(node.nodeValue || node.firstChild.nodeValue));
	i++;	
}
Трейсит:

1 <item>1</item>
3 2
1 <item>3</item>

Т.е. при типе узла 3 (текстовый) он ни разу не undefined

а вот тут
Код:
var str = "<block><item>1</item><![CDATA[2]]><item>3</item></block>";
var xml = new XML();
xml.ignoreWhite = true;
xml.parseXML(str);


	trace(xml.firstChild.childNodes[1].childNodes[0])
Как раз undefined.

Старый 09.10.2007, 18:56
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 30  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Ну и что ты хотел этим сказать?
Все работает ровно так, как должно.

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:54.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.