for-Schleife
dennis-the-menace01
- javascript
0 Cheatah0 dennis-the-menace01
Hallo,
komme mit folgendem Code nicht mehr weiter. Warum funktioniert 'test' aber nicht 'location'?
Besten Dank und Gruß.
Dennis
<script type="text/javascript">
function test() {
var value = document.getElementById('TEST').firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.childNodes[0].nodeValue;
alert(value);
}
</script>
<script type="text/javascript">
function location() {
var anzahl = document.getElementById('TEST').firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.childNodes.length;
alert(anzahl);
for (i=1; i <= anzahl; ++i) {
alert(i);
var value = document.getElementById('TEST').firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.childNodes[i].nodeValue;
alert(value);
}
}
</script>
<A href="javascript:location()">Schleife</A>
<A href="javascript:test()">direkt</A>
Hi,
komme mit folgendem Code nicht mehr weiter. Warum funktioniert 'test' aber nicht 'location'?
weil 'location' etwas anderes ist.
Cheatah
Hallo Cheatah,
geht trotzdem nicht.
Hier mal der ganze Quelltext. Hat noch jemand eine Idee? Ich möcht's halt verstehen.
<HEAD>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<META NAME="GENERATOR" Content="Microsoft DHTML Editing Control">
<TITLE>BW Web Application</TITLE>
<script type="text/javascript">
function test() {
var value = document.getElementById('TEST').firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.childNodes[0].nodeValue;
alert(value);
}
</script>
<script type="text/javascript">
function get_it() {
var anzahl = document.getElementById('TEST').firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.childNodes.length;
alert(anzahl);
for (i=1; i <= anzahl; ++i) {
alert(i);
var value = document.getElementById('TEST').firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.childNodes[i].nodeValue;
alert(value);
}
}
</script>
</HEAD>
<BODY>
<P ID="TEST" >
<span id="SAP_BW_SNIPPET3">
<table width="300" border="0" cellpadding="0" cellspacing="0"><tr><td class="SAPBEXTableGrid" >
<table width="300" name="TABLE_1" class="SAPBEXCellspacing" border="0" cellspacing="1" cellpadding="0" ><tr><td nowrap class="SAPBEXstdItem">MT OTHERS</td>
</tr><tr><td nowrap class="SAPBEXstdItem">MT-AS-GMS</td>
</tr><tr><td nowrap class="SAPBEXstdItem">MT-DC</td>
</tr><tr><td nowrap class="SAPBEXstdItem">MT-DS-TGM</td>
</tr><tr><td nowrap class="SAPBEXstdItem">ST OTHERS</td>
</tr><tr><td nowrap class="SAPBEXstdItem">ST-BUII</td>
</tr><tr><td nowrap class="SAPBEXstdItem">#</td>
</tr></table>
</td>
</tr>
</table>
</span>
</P>
<P> <A href="javascript:get_it()">alert</A></P>
<P> <A href="javascript:test()">direkt</A></P>
</BODY>
</HTML>
Hi,
geht trotzdem nicht.
das einzige, was nicht geht, ist "geht nicht". Wie lautet die Problembeschreibung?
Hier mal der ganze Quelltext.
Schade, ein Link zur Seite wäre deutlich vorteilhafter.
Hat noch jemand eine Idee?
Bezüglich wessen?
Ich möcht's halt verstehen.
Du möchtest _was_ verstehen?
Cheatah
Hi,
geht trotzdem nicht.
das einzige, was nicht geht, ist "geht nicht". Wie lautet die Problembeschreibung?
Problem:
-> Das funktioniert.
var value = document.getElementById('TEST').firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.childNodes[0].nodeValue;
->Das funktioniert nicht?
for (i=1; i <= anzahl; ++i) {
alert(i);
var value = document.getElementById('TEST').firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.childNodes[i].nodeValue;
}
Frage warum?
Schade, ein Link zur Seite wäre deutlich vorteilhafter.
Ist lokal, nicht online.
Hat noch jemand eine Idee?
Bezüglich wessen?
Bezüglich des Problems.
Ich möcht's halt verstehen.
Du möchtest _was_ verstehen?
DAS Problem.
Gruß Dennis.
Hello,
var value = document.getElementById('TEST').firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.childNodes[i].nodeValue;
erstmal: das ist eine absolut furchtbare und unleserliche Konstruktion, die kein Mensch mehr nachvollziehen kann. Du könntest mir das zugehörige Dokument geben und ich bräuchte, obwohl das Vorgehen sehr einfach ist, wahrscheinlich 5-10 Minuten um mir zu überlegen was da überhaupt rauskommen könnte. Aber gut.
Der Umstand, dass du kein Ergebnis bekommst (Fehlermeldung wäre übrigens nett gewesen, bevorzugt von einem Firefox o.ä.), könnte daran liegen, dass deine Schleife bei 1 beginnt, deine Direktabfrage aber auf das 0. Arrayelement zugreift. Gibt es vielleicht nur das eine Kind?
MfG
Rouven
Hello,
var value = document.getElementById('TEST').firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.childNodes[i].nodeValue;
erstmal: das ist eine absolut furchtbare und unleserliche Konstruktion, die kein Mensch mehr nachvollziehen kann. Du könntest mir das zugehörige Dokument geben und ich bräuchte, obwohl das Vorgehen sehr einfach ist, wahrscheinlich 5-10 Minuten um mir zu überlegen was da überhaupt rauskommen könnte. Aber gut.
Der Umstand, dass du kein Ergebnis bekommst (Fehlermeldung wäre übrigens nett gewesen, bevorzugt von einem Firefox o.ä.), könnte daran liegen, dass deine Schleife bei 1 beginnt, deine Direktabfrage aber auf das 0. Arrayelement zugreift. Gibt es vielleicht nur das eine Kind?
wie gesagt: von 1 - 10 zaehlen koennen. Ja es gibt nur das eine Kind. Aber die Funktion sagt es seien 7 Kinder. Hm... Vielleicht sollte man da auch nochmal seine Zaehlkenntnisse anwenden.
Tip an dennis-the-menace01: Wenn Du Abfragst wieviele Kinder element X hat, versuch nicht damit Element Y zu bearbeiten...
Schreib Dir lieber venuenftigen (lesbareren) Code.
Schreib Dir lieber venuenftigen (lesbareren) Code.
Hallo,
sehe den Fehler ja ein, kein Problem. Aber das ID-Element ist so gegeben (fix). Genau dieses will ich nun auslesen und versuche an alle Texte zu kommen.
Für Verbesserungsvorschläge bezüglich lesbarerer codes wäre ich dankbar.
Gruß Dennis.
Hast Du denn jetzt dein Problem im Griff, oder immer noch nicht? Wie gesagt, du zaehlst ein anderes Element als Du ueberpruefst. Das erste Element hat 7? Kinder, aber das, was Du beim Ausgeben benutzt hat nur eines.
Hast Du denn jetzt dein Problem im Griff, oder immer noch nicht? Wie gesagt, du zaehlst ein anderes Element als Du ueberpruefst. Das erste Element hat 7? Kinder, aber das, was Du beim Ausgeben benutzt hat nur eines.
Bin noch nicht soweit.
Aber das was ich ausgebe ist doch genau der Text, den ich als erstes Element erachtet hätte(die 7 Tabellenfelder).
Häng gerade ein wenig in der Luft.
Zaehl mal spasseshalber deine first Childs...
Sowas kannst Du hiermit verhindern:
function getMyChild(element,anzahl)
{
myelement=document.getElementById(element)
for (i = 1; i<= anzahl; i++)
{
myelement = myelement.firstChild
alert(i)
}
text=myelement.childNodes[0].nodeValue
alert (text)
}
kopier das in deinen Code und ruf es mal mit getMyChild('Test',9) auf.
Damit solltest du was anstellen koennen und all die firstChilds aus dem Code entlassen. Mit einem returnvalue kannst Du dann gemuetlich alles definieren, wenn Du magst:
meinElement = getMyChild('Name',Nummer firstChild)
meinElement = getMyChild('Test',9) gaebe also das 9 Kindeskind der ID Test.
Schaetze das ist uebersichtlicher als 20 x firstChild.
Beide Codes funktionieren nicht. Gib doch mal im ersten ein was Du im 2 generiertst. Wenn ich im ersten Code das pruefe, was im 2. geprueft wird geht das genausowenig. Denk mal drueber nach... (hat was damit zu tun bis 10 zaehlen zu koennen)
Hi,
<P ID="TEST" >
<span id="SAP_BW_SNIPPET3">
<table width="300" border="0" cellpadding="0" cellspacing="0"><tr><td class="SAPBEXTableGrid" >
document.getElementById('TEST').firstChild
der textnode mit dem Whitespace (Zeilenumbruch usw.) zwischen dem öffnenden p-Tag und dem öffnenden Span-Tag.
document.getElementById('TEST').firstChild.firstChild
textnodes haben keine Childnodes.
Aber selbst unter der Annahme, daß der Whitespace kein eigener Textnode ist, dann wäre
document.getElementById('TEST').firstChild
das span-Element.
Dieses hat aber keine Kindknoten (span/p darf ja kein table enthalten).
Damit ist document.getElementById('TEST').firstChild.firstChild undefined ...
cu,
Andreas