>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >как данные из DOMXMLDocument вставит HTMLDocument http://forum.mozilla-russia.org/viewtopic.php?id=6748 |
vflash > 06-12-2005 15:38:37 |
возможнео это и не возможно ео всеже я делаю пока так но я предпологаю так что переводя сперва в STRING а потом формирую по строке обьект ( .innerHTML = STRING) я выполняю не нужные дествия связанные с конвертацие и потом при формировании еше и проверкой провельности хмл в STRING есть ли другой правельный вареант |
Infant > 06-12-2005 20:13:26 |
vflash |
vflash > 06-12-2005 21:06:32 |
если ты сильно умный то буть добр не мучий людей своее гинеальностью А мож ны имееш ввиду ошибки вроде "document.getElementById("tabl").innerHTML = convStr.serializeToString(newRoot)" или "XML", "HTML" ,enm lj,h yt nt negb yf 'njv ajhevt kz 'njuj tcnm cgtwbfkmyst vtcnf lkz lt,bkjd Достаточно прочитать пункт 3.7 в правилах, и станет все ясно. Замечание. |
Anton > 07-12-2005 00:17:33 |
vflash пишет
А DOM Inspector показывает, что 1x2x - это не просто текст. Всё вставляется так, как и нужно. Ну, разве что, пространстов имён указать - правильнее будет: А чем не нравится ? Нормальный вариант. А вот за это: vflash пишет
порекомендую модератору сделать тебе замечание. |
vflash > 07-12-2005 06:52:14 |
наверно приведу пример что я делаю пока я на таком вареанте остановился но всеже хотел обойти обойти ".innerHTML" . doc = new XMLHttpRequest(); convStr = new XMLSerializer(); docxml = doc.responseXML; newRoot = document.createElement('tbody'); function downrow() { // x =x+1; } else { }; <table border="1px" width="100%"> <?xml version="1.0" encoding="windows-1251"?> ****************************************************** использовать хнтмл , возможно еше не пробовал но нужно всеже xml и чтота неверится что пойдет но всеже посмотрю, попробую а вопрос всеже в начале был как к HtmlObj "присоединить" XmlObj ,не спроста они всеже разные, |
Rion > 07-12-2005 09:41:36 |
vflash, мне лень было смотреть ваш код, поэтому для эксперимента я написал свой, который у меня прекрасно работает. |
Rion > 07-12-2005 10:13:26 |
можно ещё так Выделить код Код:function domtoE4X(e) { var s=new XMLSerializer().serializeToString(e); s=s.replace(/<\?[^<]*\?>/,''); return new XML(s); } var x=new XMLHttpRequest(); x.open('GET','testxml.xml',false); x.send(null); document.getElementById('forxml').innerHTML=domtoE4X(x.responseXML); |
Anton > 07-12-2005 14:34:18 |
vflash пишет
vflash, повторяю ещё раз: это НЕ текстовое содержание. Это просто выглядит как текстовое содержание. Вся трабла в том, что <tr>, указанные в xml не являются элементами html, поэтому и отображаются неверно. Укажи пространство имен xhtml для <tr> в своём xml, и всё будет отображаться как нужно: Выделить код Код:<?xml version="1.0" encoding="windows-1251"?> <table> <tr xmlns="http://www.w3.org/1999/xhtml"> <td>2004-07-20 09:56 </td> <td>sdhsdh</td> <td>dsfhgdfg544</td> </tr> <tr xmlns="http://www.w3.org/1999/xhtml"> <td>2004-07-20 09:56 </td> <td>dfghsdfhbb dfsgdfgcxvbcvnbxcvn</td> <td>dfgsdfgs dfgd</td> </tr> </table> |
vflash > 07-12-2005 16:56:18 |
Rion а вот антон говарит истену, сделал я xhtml и все как по маслу , я предпологал что обьекты отлечаются потому не получалось одно добавить в другое и теперь у меня получилось чтота вроде этого но пока не окончательно конечно еше много надо добавить для того чтоб работало как было задумано это у меня скрол таблицы, данные динамически подгружаются с сервера и получается чтота вроде прокрутки Выделить код Код:<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title></title> </head> <script> doc = new XMLHttpRequest(); convStr = new XMLSerializer(); doc.open("GET", "http://server/xml3.xml", false); doc.send(null); docxml = doc.responseXML; tabl = docxml.firstChild.getElementsByTagName("tr"); x = 0; function uprow() { if (document.getElementById("tabl")) { if (tabl[x]) { newRoot = document.getElementById("tabl"); newRoot.insertBefore(tabl[x],newRoot.getElementsByTagName("tr")[0]) maxrow = newRoot.getElementsByTagName("tr").length; if (maxrow > 20) { newRoot.removeChild(newRoot.getElementsByTagName("tr")[maxrow-1]); }; } else { doc.open("POST", "http://server/xml3.xml", false); doc.send(null); docxml = doc.responseXML; tabl = docxml.firstChild.getElementsByTagName("tr"); x = 0; }; }; }; function downrow() { if (document.getElementById("tal")) { if (tabl[0]) { newRoot = document.getElementById("tabl"); newRoot.appendChild(tabl[0]); if (newRoot.getElementsByTagName("tr").length > 20) { newRoot.removeChild(newRoot.getElementsByTagName("tr")[0]); }; } else { doc.open("POST", "http://server/xml3.xml", false); doc.send(null); docxml = doc.responseXML; tabl = docxml.firstChild.getElementsByTagName("tr"); x = 0; }; }; }; function startrow() { if (document.getElementById("tal")) { if (tabl[0]) { newRoot = document.getElementById("tabl"); newRoot.appendChild(tabl[0]); if (newRoot.getElementsByTagName("tr").length > 20) { newRoot.removeChild(newRoot.getElementsByTagName("tr")[0]); }; } else { window.clearInterval(scroltaim); scroltaim = false; }; } ; }; scroltaim = false; scroltaim = window.setInterval(startrow, 15); </script> <body> <table border="0" cellpadding="2px" cellspacing="0" width="100%" id="tal"> <tr bgcolor="#003399"> <td width="40%" height="22" bgcolor="#003399"> <div align="center" ><font color="#FFFFFF"><strong>Ôàìèëèÿ È.Î.</strong></font></div></td> <td width="48%"> <div align="center"><font color="#FFFFFF"><strong>Àäðåñ</strong></font></div></td> <td > <div align="center"><strong><font color="#FFFFFF">Òåëåôîí</font></strong></div></td> </tr> <tr height="8px"> <td class="und1" bgcolor="#009933" onMouseOver="javascript:if (!scroltaim) {scroltaim = window.setInterval(uprow, 60);};" onMouseOut="javascript:window.clearInterval(scroltaim);scroltaim=false" > <img scr="" width="1px" height="1px"> </td> <td class="und1"><img scr="" width="1px" height="1px"></td> <td class="und1"><img scr="" width="1px" height="1px"></td> </tr> <tbody id="tabl"> </tbody> <tr height="8px"> <td bgcolor="#009933" onMouseOver="javascript:if (!scroltaim) {scroltaim = window.setInterval(downrow, 60);};" onMouseOut="javascript:window.clearInterval(scroltaim);scroltaim=false"></td> <td></td> <td></td> </tr> </table> ну а что примерно в XMLе я уже показывал , и при каждом "такте" таймера я добавляю элемент из tabl , я вот не понял почему я вставляю tabl[0] или tabl[x] у меня происходит при следуюшем обрашении "такте" я из tabl беру следуюший элемент хоть даже если tabl[0] не совсем корректно обьяснил но сами взгляните на код где у меня tabl[x] а x у меня всегда 0 а всеровно все работает как надо мож кто знает способ чтобы както лудше оптемезировать код для повышения скорости работы , дело в том что это будет работать на слабых машинах а потому каждый такт на счету |
Anton > 07-12-2005 17:35:18 |
vflash пишет
Опыт: Выделить код Код:... alert (tabl [x + 1]); newRoot. appendChild (tabl [x]); alert (tabl [x + 1]); ... показывает, что именно все работает как надо, а вот если добавить x=x+1, то как раз и не будет как надо работать. Элемент после appendChild "изымается" из массива. |
vflash > 07-12-2005 19:14:03 |
если appendChild изымает то тогда чтобы это не происходило то надо добовлять клон , я правельно понял? |
Anton > 07-12-2005 20:15:58 |
vflash пишет
Зачем ? Работает же Даже переменную инкрементировать не нужно. Просто, учесть на будущее, чтобы "жука" не поймать |
Rion > 08-12-2005 12:42:40 |
vflash, про responseText знаю, но на форумах говорят тчо штука глючная в отношении кодировок, поэтому эксперементировать не стал. к тому же привел способ преобразоавния DOM XML в E4X XML, а из E4X можно легко, без какого либо гемороя выцепить любой контент и куда угодно его вставить. |
Rion > 08-12-2005 12:44:46 |
vflash, если вставлять с помощью innerHTML то браузер сам распарсит код в соответсвии с доктипом самым подходящим образом. В вашем же коде очень много лишнего мусора, поэтому мне и лень было его изучать. PS не надо строить из себя мега умника |