[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Динамическая таблица Mozilla
pavel24071988
Доброе утро.
Может быть кто сталкивался с такой проблемой

У меня есть код, который работает во всех браузерах кроме Mozilla :

for (i=0; i<10; i++){ //В цикле формируем таблицу по списку документов (по полученной XML строке)
var num = 1+i;
var a = "2";
var b = "1";
var c = "2";
var d = "4";
var e = "3";
var f = "2";
var g = "1";
var j = "0";
var k = "4";
var l = "2";
var m = "5";
var r = document.createElement('tr');
var cnum = document.createElement('td');
var ca = document.createElement('td');
var cb = document.createElement('td');
var cc = document.createElement('td');
var cd = document.createElement('td');
var ce = document.createElement('td');
var cf = document.createElement('td');
var cg = document.createElement('td');
var cj = document.createElement('td');
var ck = document.createElement('td');
var cl = document.createElement('td');
var cm = document.createElement('td');

var tnum = document.createTextNode(num);
var ta = document.createTextNode(a);
var tb = document.createTextNode(b);
var tc = document.createTextNode(c);
var td = document.createTextNode(d);
var te = document.createTextNode(e);
var tf = document.createTextNode(f);
var tg = document.createTextNode(g);
var tj = document.createTextNode(j);
var tk = document.createTextNode(k);
var tl = document.createTextNode(l);
var tm = document.createTextNode(m);

var t = document.all('tbb');

cnum.appendChild(tnum);
ca.appendChild(ta);
cb.appendChild(tb);
cc.appendChild(tc);
cd.appendChild(td);
ce.appendChild(te);
cf.appendChild(tf);
cg.appendChild(tg);
cj.appendChild(tj);
ck.appendChild(tk);
cl.appendChild(tl);
cm.appendChild(tm);

r.appendChild(cnum);
r.appendChild(ca);
r.appendChild(cb);
r.appendChild(cc);
r.appendChild(cd);
r.appendChild(ce);
r.appendChild(cf);
r.appendChild(cg);
r.appendChild(cj);
r.appendChild(ck);
r.appendChild(cl);
r.appendChild(cm);
t.tBodies(0).appendChild(r);
}


В чем проблема не могу понять!



Спустя 25 минут, 17 секунд (9.09.2011 - 08:37) kirik написал(а):
Посмотрите консоль в браузере на наличие ошибок.

Спустя 9 минут, 56 секунд (9.09.2011 - 08:47) pavel24071988 написал(а):
IE ошибок в коде не находит.

Mozilla firebug ничего подозрительного тоже не находит...

Спустя 6 минут, 48 секунд (9.09.2011 - 08:54) ApuktaChehov написал(а):
Мюсье знает толк в извращениях wink.gif

И так, начну с начала.
1)
Видимо, вы не читали мои посты, в предыдущих темах. Я уже писал, что document.all НЕ ПОДДЕРЖИВАЕТСЯ всеми браузерами. Если вам нужно получить элемент, то используйте getElementById, если вам нужна коллекция элементов, по тегу, используйте getElementsByTagName.

2) tBodies(0) так же НЕ ПОДДЕРЖИВАЕТСЯ всеми браузерами.

3) Вы откуда вообще берете ваш код? Зачем городить огород, создавая кучу элементов, потом вставляя еще куда-нибудь? Сформируйте строку с тегами таблицы и значениями переменных, и посредством innerHTML вставьте в таблицу. Это займет 5-10 строк. И все сразу будет ясно и понятно. Зачем столько всего? Не понимаю.

Спустя 13 минут, 38 секунд (9.09.2011 - 09:07) pavel24071988 написал(а):
"Мюсье знает толк в извращениях wink.gif" - эт точно...
Разобрался
Код

var t = document.all('tbb');

Заменил на

var t = document.getElementById('tbb');

И код

...
var t = document.getElementById('tbb');
...

...

t.tBodies(0).appendChild(r);
...


Поменял на

...
var t = document.getElementById('tbb');
...

...

t.appendChild(r);
...


Mozilla побежден уже с утра!
Спасибо большое.

Спустя 3 минуты, 18 секунд (9.09.2011 - 09:10) pavel24071988 написал(а):
innerHTML - добро, все остальное зло!
document.getElementById() - добро, всё остальное зло!

Правильно?

Спустя 8 минут, 11 секунд (9.09.2011 - 09:19) ApuktaChehov написал(а):
Все для своих целей создано. Если вы пытаете сковородой забить гвоздь, но-то конечно получится. Но молотком быстрее, удобнее, эффективнее и безопаснее.

innerHTML - вставляет HTML разметку нас страницу. Но так же спокойно можно вставляет обычный текст.

про
document.getElementById и getElementsByTagName, я уже писал выше.

Спустя 25 минут, 14 секунд (9.09.2011 - 09:44) pavel24071988 написал(а):
Что то я рано обрадовался :(

В Mozille почему то не работает выборка значений тегов из XML
Я получаю XML строкой ответ от сервера посредством XMLHttpRequest - firebug пишет что получает эту XML даже показывает её в нормальном виде (деревом)
Я пытаюсь получить значения тегов посредством getElementsByTagName - но ничего не получается...


Ничего не понимаю, ведь getElementsByTagName для этого же и используется

Вот ответ
<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<listDoc><row><id_doc>
60/41 08.09.11 14864 0 207336 eO </id_doc><date_doc>2011-09-08 00:00:00</date_doc>...</row></listDoc>


Вот код

var id_doc_first = XMLResponse.getElementsByTagName('id_doc')[0].childNodes[0].nodeValue;

Спустя 13 минут, 44 секунды (9.09.2011 - 09:58) ApuktaChehov написал(а):
Вы неправильно с деревом DOM работаете. Потому что ваш id_doc является потомком listDoc. Значит нужно делать вот так:

var id_doc_first = XMLResponse.getElementsByTagName('listDoc')[0].getElementsByTagName('row')[0].getElementsByTagName('id_doc')[0].childNodes[0].nodeValue;


Все ваши беды от того, что вы все делает не по спецификации. Если все делать как это придумали разработчики, то в 99% случаев, все работает.

Спустя 2 минуты, 46 секунд (9.09.2011 - 10:00) ApuktaChehov написал(а):
Вообще, работать должно и так:
var id_doc_first = XMLResponse.getElementsByTagName('listDoc')[0].getElementsByTagName('row')[0].getElementsByTagName('id_doc')[0].childNodes[0].nodeValue;


И так:
var id_doc_first = XMLResponse.getElementsByTagName('listDoc')[0].getElementsByTagName('id_doc')[0].childNodes[0].nodeValue;

Спустя 3 минуты, 41 секунда (9.09.2011 - 10:04) pavel24071988 написал(а):
Оба варианта прекрасно работают в IE, Opera, Chrome но не в "моей" Mozille

Может у меня Mozilla не правильная... (и дает неправильный мед)?

Спустя 1 минута, 47 секунд (9.09.2011 - 10:06) ApuktaChehov написал(а):
Какую ошибку выдает?

Спустя 9 минут, 17 секунд (9.09.2011 - 10:15) pavel24071988 написал(а):
Функция, формирующая таблицу :

function f_CreateXMLListDoc() {
// формируем XMLRequstToPHP
//var XMLRequestToPHP =

// запрашиваем PHP

y=1;
//alert(1 + parseFloat(document.getElementById('tbb').children[0].childNodes[w].children[0].innerHTML));
for(w=1; w<1000; w++){
try {
var y = (1 + parseFloat(document.getElementById('tbb').children[0].childNodes[w].children[0].innerHTML));
} catch(err){}

}

for (z=0;z<y-1;z++){
var mainObj = document.getElementById('tbb').children[0];
oneChild = mainObj.lastChild;
mainObj.removeChild(oneChild);
}

try{
XMLResponse = f_RequesttoPHP('<?xml version="1.0" encoding="UTF-8" standalone="no"?><argument><row><idkontr></idkontr><nkontr /><category /><iddoc /><idtypedoc /><method>rc_listdoc</method></row></argument>');
var id_doc_first = XMLResponse.getElementsByTagName('listDoc')[0].getElementsByTagName('row')[0].getElementsByTagName('id_doc')[0].childNodes[0].nodeValue;
document.getElementsByTagName('id_doc').innerHTML = id_doc_first;
for (i=0; i<10000; i++){ //В цикле формируем таблицу по списку документов (по полученной XML строке)
var num = 1+i;
var a = XMLResponse.getElementsByTagName('id_doc')[i].childNodes[0].nodeValue;
var b = XMLResponse.getElementsByTagName('date_doc')[i].childNodes[0].nodeValue;
var c = XMLResponse.getElementsByTagName('nom_doc')[i].childNodes[0].nodeValue;
var d = XMLResponse.getElementsByTagName('status')[i].childNodes[0].nodeValue;
try {var e = XMLResponse.getElementsByTagName('id_trans')[i].childNodes[0].nodeValue}
catch(err){var e = "";}
if (!XMLResponse.getElementsByTagName('summa')[i].childNodes[0].nodeValue == "")
{ var f = parseFloat(XMLResponse.getElementsByTagName('summa')[i].childNodes[0].nodeValue).toFixed(2); }
else {}
try {var g = XMLResponse.getElementsByTagName('commentary')[i].childNodes[0].nodeValue}
catch(err){var g = "";}
try {var j = XMLResponse.getElementsByTagName('deficit')[i].childNodes[0].nodeValue}
catch(err){var j = "";}
var k = XMLResponse.getElementsByTagName('supplier')[i].childNodes[0].nodeValue;
var l = XMLResponse.getElementsByTagName('n_type_doc')[i].childNodes[0].nodeValue;
var m = XMLResponse.getElementsByTagName('id_type_doc')[i].childNodes[0].nodeValue;

var r = document.createElement('tr');
var cnum = document.createElement('td');
var ca = document.createElement('td');
var cb = document.createElement('td');
var cc = document.createElement('td');
var cd = document.createElement('td');
var ce = document.createElement('td');
var cf = document.createElement('td');
var cg = document.createElement('td');
var cj = document.createElement('td');
var ck = document.createElement('td');
var cl = document.createElement('td');
var cm = document.createElement('td');

var tnum = document.createTextNode(num);
var ta = document.createTextNode(a);
var tb = document.createTextNode(b);
var tc = document.createTextNode(c);
var td = document.createTextNode(d);
var te = document.createTextNode(e);
var tf = document.createTextNode(f);
var tg = document.createTextNode(g);
var tj = document.createTextNode(j);
var tk = document.createTextNode(k);
var tl = document.createTextNode(l);
var tm = document.createTextNode(m);

var t = document.getElementById('tbb');

cnum.appendChild(tnum);
ca.appendChild(ta);
cb.appendChild(tb);
cc.appendChild(tc);
cd.appendChild(td);
ce.appendChild(te);
cf.appendChild(tf);
cg.appendChild(tg);
cj.appendChild(tj);
ck.appendChild(tk);
cl.appendChild(tl);
cm.appendChild(tm);

r.appendChild(cnum);
r.appendChild(ca);
r.appendChild(cb);
r.appendChild(cc);
r.appendChild(cd);
r.appendChild(ce);
r.appendChild(cf);
r.appendChild(cg);
r.appendChild(cj);
r.appendChild(ck);
r.appendChild(cl);
r.appendChild(cm);

t.appendChild(r);
}
}
catch(err){}
}



Я переделал как по "спецификации" В мозиле ничего.

В мозилле переменная

var id_doc_first = XMLResponse.getElementsByTagName('listDoc')[0].getElementsByTagName('row')[0].getElementsByTagName('id_doc')[0].childNodes[0].nodeValue;

не определена, хотя в IE здесь значение нужного мне тега

Спустя 9 минут, 20 секунд (9.09.2011 - 10:24) pavel24071988 написал(а):
Я сейчас уже напрямую в переменную засовываю XML строку - он и так с ней не работает wacko.gif

Спустя 15 минут, 32 секунды (9.09.2011 - 10:40) ApuktaChehov написал(а):
Хорошо, сделайте так. Сначала сделайте алерт XMLResponse.getElementsByTagName('listDoc')[0], если объект существует, сделайте алекрт XMLResponse.getElementsByTagName('listDoc')[0].getElementsByTagName('row')[0], если объект существует, сделайте алекрт XMLResponse.getElementsByTagName('listDoc')[0].getElementsByTagName('id_doc')[0], если объект существует сделайте алерт XMLResponse.getElementsByTagName('listDoc')[0].getElementsByTagName('id_doc')[0].childNodes[0].

И скажите что получилось.

Спустя 15 минут, 50 секунд (9.09.2011 - 10:56) pavel24071988 написал(а):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<meta
http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta
name="author" content="MESMERiZE" />

<title>
Untitled 1</title>
</head>

<body>

<script
type="text/javascript" language="javascript">
var
XML = ('<?xml version="1.0" encoding="UTF-8" standalone="no"?><listDoc><row><id_doc>60/41 08.09.11 14864 0 207336 eO </id_doc><date_doc>2011-09-08 00:00:00</date_doc><nom_doc>14864</nom_doc><status>Оформлен</status><id_tran s></id_trans><summa>420.00000000</summa><deficit></deficit><commentary></commentary><supplier>Сел ютин В.Д. ИП</supplier><n_type_doc>Отпуск товара </n_type_doc><id_type_doc>8</id_type_doc></row><row><id_doc>60/41 08.09.11 14863 0 207336 eO </id_doc><date_doc>2011-09-08 00:00:00</date_doc><nom_doc>14863</nom_doc><status>Оформлен</status><id_tran s></id_trans><summa>275.00000000</summa><deficit></deficit><commentary></commentary><supplier>Сел ютин В.Д. ИП</supplier><n_type_doc>Отпуск товара </n_type_doc><id_type_doc>8</id_type_doc></row><row><id_doc>60/41 08.09.11 14853 0 207336 eO </id_doc><date_doc>2011-09-08 00:00:00</date_doc><nom_doc>14853</nom_doc><status>Тов. резерв.</status><id_trans></id_trans><summa>121.00000000</summa><deficit></deficit><commentary>тест3</commentary><supplier&g t;Селютин В.Д. ИП</supplier><n_type_doc>Отпуск товара </n_type_doc><id_type_doc>8</id_type_doc></row><row><id_doc>60/41 19.07.11 13702 0 207336 eO </id_doc><date_doc>2011-08-18 00:00:00</date_doc><nom_doc>13702</nom_doc><status>Оформлен</status><id_trans>Эксп Косолапов А.А. на 20/07/11 00:00 </id_trans><summa>3100.00000000</summa><deficit></deficit><commentary></commentary><supplier>Сел ютин В.Д. ИП</supplier><n_type_doc>Отгрузка из п/отчёта </n_type_doc><id_type_doc>19</id_type_doc></row><row><id_doc>60/41 06.07.11 12664 0 207336 eO </id_doc><date_doc>2011-08-16 00:00:00</date_doc><nom_doc>12664</nom_doc><status>Оформлен</status><id_tran s>Эксп Пархоменко А.М. на 06/07/11 00:00 </id_trans><summa>2955.00000000</summa><deficit></deficit><commentary>примечание 1111111111111111111</commentary><supplier>Селютин В.Д. ИП</supplier><n_type_doc>Отпуск товара </n_type_doc><id_type_doc>8</id_type_doc></row><row><id_doc>60/41 08.07.11 12840 0 207336 eO </id_doc><date_doc>2011-08-15 00:00:00</date_doc><nom_doc>12840</nom_doc><status>Оформлен</status><id_trans>Эксп Анохин В.И. на 08/07/11 00:00 </id_trans><summa>6120.00000000</summa><deficit></deficit><commentary>примечание 12840</commentary><supplier>Селютин В.Д. ИП</supplier><n_type_doc>Отпуск товара </n_type_doc><id_type_doc>8</id_type_doc></row></listDoc>');
var otvet = XML.getElementsByTagName('listDoc')[0];
</script>

</body>
</html>



Firebug : значение переменной otvet "undefined"


Спустя 19 минут, 3 секунды (9.09.2011 - 11:15) ApuktaChehov написал(а):
Вы думаете, если вы в начале обычной строки напишите "<?xml version="1.0" encoding="UTF-8" standalone="no"?>", то это строка волшебным образом превратиться в xml документ? Ошибаетесь. Это я о вашем предыдущем посте.

А по делу
Тот xml документ, который вы скопировали в пост выше, содержит ошибки, и не одну. После того, как я его поправил, все заработало.

Этот документ должен выглядеть так:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<listDoc>
<row>
<id_doc>
60/41 08.09.11 14864 0 207336 eO </id_doc>
<date_doc>
2011-09-08 00:00:00</date_doc>
<nom_doc>
14864</nom_doc>
<status>
Оформлен</status>
<id_trans></id_trans>
<summa>
420.00000000</summa>
<deficit></deficit>
<commentary></commentary>
<supplier>
Сел ютин В.Д. ИП</supplier>
<n_type_doc>
Отпуск товара </n_type_doc>
<id_type_doc>
8</id_type_doc>
</row>
<row>
<id_doc>
60/41 08.09.11 14863 0 207336 eO </id_doc>
<date_doc>
2011-09-08 00:00:00</date_doc>
<nom_doc>
14863</nom_doc>
<status>
Оформлен</status>
<id_trans></id_trans>
<summa>
275.00000000</summa>
<deficit></deficit>
<commentary></commentary>
<supplier>
Сел ютин В.Д. ИП</supplier>
<n_type_doc>
Отпуск товара </n_type_doc>
<id_type_doc>
8</id_type_doc>
</row>
<row>
<id_doc>
60/41 08.09.11 14853 0 207336 eO </id_doc>
<date_doc>
2011-09-08 00:00:00</date_doc>
<nom_doc>
14853</nom_doc>
<status>
Тов. резерв.</status>
<id_trans></id_trans>
<summa>
121.00000000</summa>
<deficit></deficit>
<commentary>
тест3</commentary>
<supplier>
Селютин В.Д. ИП</supplier>
<n_type_doc>
Отпуск товара </n_type_doc>
<id_type_doc>
8</id_type_doc>
</row>
<row>
<id_doc>
60/41 19.07.11 13702 0 207336 eO </id_doc>
<date_doc>
2011-08-18 00:00:00</date_doc>
<nom_doc>
13702</nom_doc>
<status>
Оформлен</status>
<id_trans>
Эксп Косолапов А.А. на 20/07/11 00:00 </id_trans>
<summa>
3100.00000000</summa>
<deficit></deficit>
<commentary></commentary>
<supplier>
Сел ютин В.Д. ИП</supplier>
<n_type_doc>
Отгрузка из п/отчёта </n_type_doc>
<id_type_doc>
19</id_type_doc>
</row>
<row>
<id_doc>
60/41 06.07.11 12664 0 207336 eO </id_doc>
<date_doc>
2011-08-16 00:00:00</date_doc>
<nom_doc>
12664</nom_doc>
<status>
Оформлен</status>
<id_trans>
Эксп Пархоменко А.М. на 06/07/11 00:00 </id_trans>
<summa>
2955.00000000</summa>
<deficit></deficit>
<commentary>
примечание 1111111111111111111</commentary>
<supplier>
Селютин В.Д. ИП</supplier>
<n_type_doc>
Отпуск товара </n_type_doc>
<id_type_doc>
8</id_type_doc>
</row>
<row>
<id_doc>
60/41 08.07.11 12840 0 207336 eO </id_doc>
<date_doc>
2011-08-15 00:00:00</date_doc>
<nom_doc>
12840</nom_doc>
<status>
Оформлен</status>
<id_trans>
Эксп Анохин В.И. на 08/07/11 00:00 </id_trans>
<summa>
6120.00000000</summa>
<deficit></deficit>
<commentary>
примечание 12840</commentary>
<supplier>
Селютин В.Д. ИП</supplier>
<n_type_doc>
Отпуск товара </n_type_doc>
<id_type_doc>
8</id_type_doc>
</row>
</listDoc>


И еще, коли выкладываете XML документ, будьте, добры его отформатировать. Что помогающим вам, не пришлось тратить на это время.

Спустя 3 минуты, 32 секунды (9.09.2011 - 11:18) ApuktaChehov написал(а):
Не уверен, что по спецификации XML в теле тега допускаются пробелы - <id_tran s>.
И такое тоже не допускается: <supplier&g t;

Спустя 5 минут, 3 секунды (9.09.2011 - 11:23) pavel24071988 написал(а):
Про XML и шапку у меня даже мыслей таких не было ....
Странно
Firebug показывает корректную структуру, а данный XML в код я вставил копируя его из Firebug

Это хитрости кодировок что ли ?

Спустя 3 минуты, 40 секунд (9.09.2011 - 11:27) ApuktaChehov написал(а):
Вот вам, рабочий скрипт. Ищите разницу в представлении данных и их обработке.

Спустя 7 минут, 16 секунд (9.09.2011 - 11:34) pavel24071988 написал(а):
Этот скрипт отрабатывает только при responseText, а как же responseXML?
в скрипте я убрал условие if else и оставил только responseXML - не отрабатывает, ни чего не выводит

Спустя 4 минуты, 8 секунд (9.09.2011 - 11:39) ApuktaChehov написал(а):
Это скрипт отрабатывает оба варианта. Такой, каким вы его получили, он работает с XML. Я говорю и о серверной части тоже.

Спустя 1 минута, 51 секунда (9.09.2011 - 11:40) pavel24071988 написал(а):
Спасибо.
Пошел разбираться...

Спустя 3 дня, 3 часа, 28 минут, 22 секунды (12.09.2011 - 15:09) pavel24071988 написал(а):
Ссори за оффтоп.

Может кому пригодится и съэкономит много времени (дня 2 точно).

Свойство tBodies(0) поддерживается не всеми браузерами, только IE, Opera, Chrome
НО!!! свойство tBodies[0] (разница в обращении blink.gif ) поддерживается ими же и ещё плюс Mozilla.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.