php.de

Zurück   php.de > Webentwicklung > JavaScript, Ajax und mehr

JavaScript, Ajax und mehr dynamisches Scripten und Interaktion auf Clientebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.02.2011, 16:28  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard getElementsByTagName Array wird nicht komplett abgearbeitet

Hallo Leute,

sollte der Threadtitel nicht passen zum beschriebenen Problem, dann bitte schlagt einen besseren vor, ich werde ihn dann sofort ändern.

Also ich will beim laden eines Dokumentes nach allen DIV Elementen suchen. Dann dieses Array mit einer Schleife durchlaufen und da drin dann eine IF Kontrollabfrage machen wo ich sicher stelle das nur DIV's abgearbeitet werden die ein id="vote_n" (n steht für eine Zahl) besitzen.

In diesen DIV's befinden sich Grafiken, leider sind zwischen den Grafiken bzw. überall da wo ein Zeilenumbruch ist auch Textnodes #text vorhanden. Diese will ich löschen um am Ende vernünftig mit den Grafikelementen weiter arbeiten zu können.

Mein Problem nun, es wir nur einmal abgearbeitet, also nur der erste DIV. Der Rest bleibt unverändert. In der Fehlerkonsole bekomme ich folgende Ausgabe, aber kann mir leider nicht erklären warum.
Zitat:
Fehler: voteDivs[j].childNodes[k] is undefined
Quelldatei: http://localhost/star_vonting/
Zeile: 28
Zeile 28 ist folgende
Code:
if ( voteDivs[j].childNodes[k].nodeName == "#text" ) {
So und hier mal der ganze Code, Javascript wie HTML dazu.

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
    <head>
        <meta http-equiv="Pragma" content="no-cache" />
        <meta http-equiv="Expires" content="-1" />
        <meta http-equiv="Cache-Control" content="no-cache" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        
        <link href="css/css.css" rel="stylesheet" type="text/css" />
        
        <script type="text/javascript" src="js/star_voting.js"></script>
        
        <script type="text/javascript">
            window.onload = function () {
                var voteDivs = document.body.getElementsByTagName( "div" );
                
                for ( var j = 1; j <= voteDivs.length; j++ ) {
                    
                    if ( voteDivs[j].getAttribute( "id" ) == "vote_" + j ) {
                        var cntChildNodes = voteDivs[j].childNodes.length;
                        
                        for ( var k = 0; k < cntChildNodes; k++ ) {

                            if ( voteDivs[j].childNodes[k].nodeName == "#text" ) {
                                voteDivs[j].removeChild( voteDivs[j].childNodes[k] );
                            }
                        }
                    }
                }
            }
        </script>
        
        <title>Lit-Web Stern Berwertung mit Javascript und Ajax</title>
    </head>
    <body>
        <div id="debug"> </div>
        <div id="vote_1" style="margin-bottom: 5px; width: 150px;">
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
        </div>
        <div id="vote_2" style="margin-bottom: 5px; width: 150px;">
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
        </div>
        <div id="vote_3" style="margin-bottom: 5px; width: 150px;">
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
        </div>
        <div id="vote_4" style="margin-bottom: 5px; width: 150px;">
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
        </div>
        <div id="vote_5" style="margin-bottom: 5px; width: 150px;">
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
            <img src="grafiken/star_black.png" alt="star" style="border: none;" />
        </div>
    </body>
</html>
Ich bin zu der Schlussfolgerung gekommen das der Fehler auftritt weil die Schleife nur einmal durchlaufen wird, demzufolge sind voteDivs[j].childNodes[k] undefined. Aber warum passiert das, warum wird die Schleife nur einmal durchlaufen obwohl es doch aber 5 DIV Container gibt die meiner Vorgabe im Code entsprechen.

Vielen Dank für eure Hilfe.

Mfg der Litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.02.2011, 16:53  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
var j = 1; j <= voteDivs
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 10.02.2011, 17:11  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
var j = 1; j <= voteDivs
Bitte entschuldige, aber häh was willst du mir damit sagen?
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 10.02.2011, 17:17  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Dass Array-Indizies nunmal bei 0 beginnen. Aus diesem Grund hast Du auch nur eine Fehlermeldung, nicht 4 bekommen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 10.02.2011, 17:38  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Ich habe den Code nun mal abgeändert und auch gleich noch paar Testausgaben gemacht und diese waren alle korrekt. Nur wird das löschen der #text Knoten immer noch nur im ersten DIV gemacht. Dann kommt wieder folgende Fehlermeldung.

Zitat:
Fehler: voteDivs[j].childNodes[k] is undefined
Quelldatei: http://localhost/star_vonting/
Zeile: 33
Hier der Code jetzt.

Code:
window.onload = function () {
               var voteDivs = document.body.getElementsByTagName( "div" );
                
                for ( var j = 0; j < voteDivs.length; j++ ) {                    

                    if ( voteDivs[j].getAttribute( "id" ).split( "_" )[0] == "vote" ) {
                        
                        // alert( voteDivs[j].getAttribute( "id" ) );
                        
                        var cntChildNodes = voteDivs[j].childNodes.length;
                        
                        // alert( cntChildNodes );
                        
                        for ( var k = 0; k <= cntChildNodes; k++ ) {

                            if ( voteDivs[j].childNodes[k].nodeName == "#text" ) {
                                // alert( voteDivs[j].childNodes[k].nodeName ); 31 mal durchlaufen, korrekt
                                voteDivs[j].removeChild( voteDivs[j].childNodes[k] );
                            }
                        }
                    }
                }
            }
Ich verstehe nicht warum die Testausgabesachen ordentlich durchlaufen wie sie sollen, aber wenn es um das löschen geht dann nicht.

[EDIT]
Obwohl ich habe grad festgestellt mit dieser Testausgabe
Code:
if ( voteDivs[j].childNodes[k].nodeName == "#text" ) {
                                alert( voteDivs[j].getAttribute( "id" ) + " / " + voteDivs[j].childNodes[k].nodeName );
                                // voteDivs[j].removeChild( voteDivs[j].childNodes[k] );
                            }
bleibt das Script im ersten DIV hängen und bricht dann ab. Warum?
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de

Geändert von litterauspirna (10.02.2011 um 17:42 Uhr).
litterauspirna ist offline   Mit Zitat antworten
Alt 10.02.2011, 17:42  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Selbes Thema.
Zitat:
k <=
Zudem ist childNodes ein DOM-Array, kein selbstdefiniertes. Folglich wird es bei jedem Durchlauf neu bestimmt und die letzten Indizies sind größer als der Array-Count.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 10.02.2011, 17:46  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Selbes Thema.
Aber ich verstehe eins nicht. Ok das = war zuviel. So nun sieht der Codeteil so aus.

Code:
for ( var k = 0; k < cntChildNodes; k++ ) {

                            if ( voteDivs[j].childNodes[k].nodeName == "#text" ) {
                                // alert( voteDivs[j].getAttribute( "id" ) + " / " + voteDivs[j].childNodes[k].nodeName );
                                voteDivs[j].removeChild( voteDivs[j].childNodes[k] );
                            }
                        }
Wenn ich das alert als Testdurchlaufen lasse, werden alle betroffenen DIVs angezeigt und bei jedem DIV 6 mal #text.

Wenn es aber ans löschen geht, dann wird das nur im ersten gemacht. Das kapiere ich grad nicht wirklich.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 10.02.2011, 17:47  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Siehe Ergänzung.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 10.02.2011, 17:49  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Siehe Ergänzung.
Ja grad eben erst gesehen. Würde ich da mit einer rekursiven Funktion besser fahren? Oder was müsste ich anders machen? Mir fehlt grad der Ansatz zu dem Problem.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 10.02.2011, 17:55  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Willst Du immer alle löschen? Dann müsste im Prinzip reichen, immer Element[0] zu entfernen. Oder einfach den Nodeinhalt komplett auf NULL zu setzen, falls da nicht noch anderes drin steht.

[edit] Ach nee, willst Du ja nicht. Dann vielleicht besser alle in Frage kommenden Nodes vorher separat in ein Array auslesen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mehrdimensionales array inhalte tauschen pidaman PHP Tipps 2010 18 27.08.2010 16:58
Suche in Text-Datenbank ein Array und lösche es - Lösung UdoDirk PHP Tipps 2010 2 18.07.2010 08:27
[Erledigt] Bereich einer Array lässt sich nicht ausgeben Polliny PHP Tipps 2010 54 21.06.2010 15:30
[Erledigt] Sortierung mehrerer Arrays philosapiens PHP Tipps 2010 16 08.06.2010 05:22
PHPLot von der Datenbank zum mehrdimensionalen Array mannimammut PHP Tipps 2009 1 15.12.2009 10:40
[Erledigt] Array Sortieren beist PHP Tipps 2009 4 10.07.2009 08:53
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Soapfault: Undefined Property Argi PHP-Fortgeschrittene 0 28.07.2008 11:17
ARRAY: alle möglichen Kombinationen Tentacle PHP Tipps 2006 13 12.05.2006 00:18
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
Array wie auslesen? PHP Tipps 2005 7 07.03.2005 11:43
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
getelementsbytagname schleife, php getelementsbytagname, getelementsbytagname, getelementsbytagname php, window.onload getelementsbytagname, getelementsbytagname array, getelementsbytagname style change php, php getelementsbytagname bestimmte, js getelementsbytagname ende anhängen, getelementsbyname javascript schleife, javascript getelementsbytagname is undefined, getelementsbytagname for schleife, php getelementsbytagname funktioniert nicht, getelementsbytagname php schleife, javascript alle div durchlaufen, javascript alle divs durchlaufen, getelementsbytagname array remove, getelementsbyname schleife, javascript alle elemente im div durchlaufen, for schleife getelementsbytagname

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:15 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum