Autor Zpráva
Charlie
Profil
Zdravím, dnes jsem se začal zabývat DOMem a přišel jsem na jednu zajímavou (z mého pohledu) věc.

Snažím se zpracovat xml soubor, který získám přes XMLHttpRequest. XML vypadá následovně:
<?xml version="1.0" encoding="utf-8"?>

<test>
<task>
<otazka>How are you?</otazka>
<odpovedi>
<odpoved>
<right>1</right>
<text>Bla bla bla</text>
</odpoved>
</odpovedi>
</task>
</test>


Projíždím cyklem všechny [strong]task[/strong]y, nejprve se snažím získat text v <otazka>, takhle:
var tasks = test.getElementsByTagName('task');


for (var i = 0; i < tasks.length; i++) {
var task = tasks.item(i);

var otazka = task.childNodes.item(1).childNodes.item(0).nodeValue;
}

V Gecku v pořádku, v IE hodnota [i]null[i], proč? IE používá očividně nějaký jiný mechanismus pro zobrazení DOMu, co mám změnit, abych měl přístup k hodnotě <otazka>?
Leo
Profil
"test.getElementsByTagName('task');"

A odkud berete promennnou test? Dal, misto childNodes.item(0) pouzijte childNodes[0]. Dalsi vec, nektere prohlizece vytvari prazdne textove uzly mezi elementy, atd. Leo
Charlie
Profil
A odkud berete promennnou test?

Pardon, zapomněl jsem zmínit - proměnná test je objekt zpracovaný pomocí responseXML v XMLHTTPRequestu.

Ty itemy změním, díky.
Charlie
Profil
Tak podle toho, co jsem zjistil, nezobrazuje IE prázdné nody, když Gecko zobrazí 5, IE jen 2.

Půlka problému je vyřešena, nicméně nastal jiný problém - v IE se nezobrazí tasky, tzn. nepřiřadí se k určenému elementu na stránce pomocí appendChild. Vše by to měla zajišťovat tato funkce:
function appendTask(task) {

var master = getMaster(); // element, kam se bude přiřazovat, <ul>
var container = document.createElement('li');
container.appendChild(task); // vložení otázky do <li>
master.appendChild(container); // vložení <li> i s otázkou do <ul>
}

Modlé mého názoru by to mohlo fungovat, ale IE zobrazí pouze <li>, obsah už ne. Možná je to proto, že se do něj snažím nacpat tabulku (!). Gecku to však nevadí.
peta
Profil *
task = document.createTextNoce("aaa") ?
===================================
ja treba pouzivam toto...

var isIE=(document.all && !window.opera)?1:0;

function objGet2(d,x) {d=d==0?document:d; return (d.getElementById?d.getElementById(x):d.all?d.all[x]:d.layers?d.layers [x]:null);}
function objDel(o) {while (o.childNodes.length) {o.removeChild(o.childNodes[0]);}} //IE na TBODY nelze pouzit innerHTML
function objEx(d,x) {return Boolean(objGet2(d,x))}
function nodeEx(x,y,z) {return (Boolean(x) && x.nodeType==y && x.nodeName==z)}

function creEL(d,x) {return d.createElement(x);}
function appEL(d,x) {d.appendChild(x);}
function addEL(d,x)
{
if (d.childNodes.length<1) {d.appendChild(x);} //IE.length=0
else {d.insertBefore(x,d.childNodes[0]);}
}
function creTN(d,x) {return d.createTextNode(x);}
function creaddTN(d,o,x){var t=d.createTextNode(x);o.appendChild(t);}
function setxEvent(x,xEvent,xFunction)
{
if (isIE) {x[xEvent]=new Function(xFunction);} //IE
else {x.setAttribute(xEvent,xFunction);} //other
}
function creAhref(d,xHref,xTarget,xClick,xTitle,xText,xClass,xImg)
{
var o,t;
o=d.createElement('A');
o.setAttribute('href' ,xHref);
if (xHref !="") {o.setAttribute('target',xTarget);}
if (xClick!="") {setxEvent(o,"onclick",xClick);}
if (xClass!="") {o.className = xClass;} //IE+other
if (xTitle!="") {o.setAttribute('title' ,xTitle);}
if (xImg !="") {o.appendChild(xImg);}
if (xText !="") {t = d.createTextNode(xText); o.appendChild(t);}

return o;
}
function creImg(d,xSrc,xAlt,xWidth,xHeight)
{
var o = d.createElement('IMG');
o.setAttribute('src' ,xSrc);
if (xAlt !="") {o.setAttribute('alt' ,xAlt);}
if (xWidth !="") {o.setAttribute('width' ,xWidth);}
if (xHeight!="") {o.setAttribute('height',xHeight);}
return o;
}

=======
o1 = creEL(f,'B');
creaddTN(f,o1,tipBold+": ");
o2 = creEL(f,'SPAN');
o2.className = 'tipText';
o2.innerHTML=tipText;
o = objGet2(f,"tip");
objDel(o);
appEL(o,o1);
appEL(o,o2);
Toto téma je uzamčeno. Odpověď nelze zaslat.

0