HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS Probleme mit HTML5, Bootstrap oder jQuery ? |
 |
|

23-11-2006, 19:38
|
mcmurphy
PHP Junior
|
|
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
|
|
Array - zählt IE falsch? Nachtrag !!
Hi,
bastel mir gerade eine Ausklapp Funktion für ein News Archive.
Damit bei abgeschalteten Javascript trotzdem alles angezeigt wird, wird das Menu beim Laden der Seite eingeklappt:
PHP-Code:
function initNewsArchive(){
try{
target = document.getElementById('right_column_newsarchive_box').firstChild.childNodes;
for(i=0; i< target.length - 1; i++){
target[i].firstChild.nextSibling.style.display = "none";
}
}catch(e){alert(e);}
}
Das klappt auch erstmal, aber!
Wenn ich in der for Bedingung nur:
target.length
schreibe werfen mir FF und Opera einen Out Of Index Fehler aus, deshalb das
target.length - 1
So wird aber im IE das letzte Element nicht auf display=none; gesetzt.
Lasse ich die - 1 weg gehts im IE, aber die anderen Browser moseren.
Mein jetziger Notbehelf wäre:
}catch(e){ /* es gibt einen Fehler */}
aber das ist ja nicht unbedingt sauber.
Weiß einer eine bessere Lösung bzw. was mache ich falsch?
__________________
"I don't want to belong to any club that would accept me as a member."
Groucho Marx
Geändert von mcmurphy (24-11-2006 um 16:43 Uhr)
|

23-11-2006, 19:52
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Re: Array - zählt IE falsch?
Was für Knoten(-Typen) enthält target denn überhaupt ...?
("Beachten sie" bzgl. childNodes in SELFHTML beachtet?)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

23-11-2006, 19:56
|
mcmurphy
PHP Junior
|
|
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
|
|
Hier der Rest vom Code:
PHP-Code:
function toggleNewsArchive(obj){
try{
parentLI = obj.parentNode;
parentUL = parentLI.parentNode;
for(i=0; i < parentUL.childNodes.length - 1; i++){
parentUL.childNodes[i].firstChild.nextSibling.style.display = "none";
}
obj.nextSibling.style.display = "block";
}catch(e){alert(e);}
}
</script>
<div class="right_column_box clearfix" id="right_column_newsarchive_box">
<ul>
<li><a href="#" onclick="toggleNewsArchive(this); return false;">2006</a>
<ul>
<li><a href="#" onfocus="if(this.blur)this.blur();">Januar</a></li>
<li><a href="#" onfocus="if(this.blur)this.blur();">Februar</a></li>
<!-- etc, Kommentare stehen im Quellcode nicht drin-->
</ul>
</li>
<li><a href="#" onclick="toggleNewsArchive(this); return false;">2005</a>
<ul>
<li><a href="#" onfocus="if(this.blur)this.blur();">Januar</a></li>
<li><a href="#" onfocus="if(this.blur)this.blur();">Februar</a></li>
<!-- etc -->
</ul>
</li>
<li><a href="#" onclick="toggleNewsArchive(this); return false;">2004</a>
<ul>
<li><a href="#" onfocus="if(this.blur)this.blur();">Januar</a></li>
<li><a href="#" onfocus="if(this.blur)this.blur();">Februar</a></li>
<li><a href="#" onfocus="if(this.blur)this.blur();">März</a></li>
<!-- etc -->
</ul>
</li>
</ul>
<script type="text/javascript">initNewsArchive();</script>
</div>
SelfHtml:
"Der Netscape 6.1 und der Internet Explorer 5.0 Macintosh Edition interpretieren im body-Element und in allen untergeordneten Knoten bereits einen Zeilenumbruch oder ein Leerzeichen im Quelltext zwischen Elementknoten als einen eigenen Kindknoten mit dem Namen #text. Auch HTML-Kommentare bilden eigene Knoten und werden als Knoten mit dem Namen #comment behandelt."
ist aber der Explorer 6.0...
werde trotzdem mal alle Umbrüche zwischen den Tag's rausnehmen..
P.S.: sind meine ersten Übungen in DOM ..
__________________
"I don't want to belong to any club that would accept me as a member."
Groucho Marx
Geändert von mcmurphy (23-11-2006 um 20:10 Uhr)
|

23-11-2006, 20:17
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Warum nutzt du nicht einfach getElementsByTagName, wenn du alle Knoten mit einem bestimmten Knotennamen unterhalb eines Knotens haben willst?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

23-11-2006, 20:23
|
mcmurphy
PHP Junior
|
|
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
|
|
Zitat:
Warum nutzt du nicht einfach getElementsByTagName, wenn du alle Knoten mit einem bestimmten Knotennamen unterhalb eines Knotens haben willst?
|
Wie wäre denn da die Syntax?
Ich will ja auch nicht alle ul ausblenden.....
Und auch wenn ich diese Lösung nehme:
merkwürdig ist das unterschiedliche Zählverhalten immer noch...
__________________
"I don't want to belong to any club that would accept me as a member."
Groucho Marx
|

24-11-2006, 08:26
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
Zitat:
Wenn ich in der for Bedingung nur:
target.length
schreibe werfen mir FF und Opera einen Out Of Index Fehler aus, deshalb das
target.length - 1
|
Dürfte dasselb sein wie in php in einer for-Schleife bis count(array). Arrays beginnen nun mal beim Element 0 und der count wird dir trotzdem eine 1 zurückgeben. Wenn du durch ein Array gehst dann musst du immer bis zu count(array) -1 gehen. Das ist durchaus normal.
Gruss
tobi
|

24-11-2006, 10:29
|
mcmurphy
PHP Junior
|
|
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
|
|
Zitat:
Wenn du durch ein Array gehst dann musst du immer bis zu count(array) -1 gehen. Das ist durchaus normal.
|
Jau, das kenne ich aber der IE 6 anscheinend nicht ...
__________________
"I don't want to belong to any club that would accept me as a member."
Groucho Marx
|

24-11-2006, 10:34
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
|
|
Zitat:
Jau, das kenne ich aber der IE 6 anscheinend nicht ...
|
Kann mir beim besten Willen nicht vorstellen, dass beim IE Arrays beim Element 1 beginnen würden. Vlllt wirft der IE nur keinen Fehler
Gruss
tobi
|

24-11-2006, 11:01
|
mcmurphy
PHP Junior
|
|
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
|
|
Zitat:
Kann mir beim besten Willen nicht vorstellen, dass beim IE Arrays beim Element 1 beginnen würden.
|
Tut er auch nicht, aber er scheint length anders zu händeln als die anderen Browser.
mit array.length zählt er durch, mit array.length - 1 läßt er mir das letzte Element weg
Hiermit
PHP-Code:
for(i=0; i< target.length - 1; i++){
target[i].firstChild.nextSibling.style.display = "none";
alert(target[i].firstChild.nextSibling.nodeType);
}
gibt er mir auch nur zweimal eine Alert Box mit einer 1 (=Elementknoten) aus, er verhaspelt sich also auch an keinem Leerzeichen / Kommentar etc. (3 / 8)
Hat einer von euch den Code mal ausprobiert?
P.S.:
Das hier:
PHP-Code:
var Zahlen = new Array(1, 2, 4, 8, 16, 32, 64, 128, 256);
for(i=0; i< Zahlen.length ; i++){
alert(Zahlen[i]);
}
macht ja alle Browser gleich ....
__________________
"I don't want to belong to any club that would accept me as a member."
Groucho Marx
Geändert von mcmurphy (24-11-2006 um 11:06 Uhr)
|

24-11-2006, 11:04
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Zitat:
Original geschrieben von mcmurphy
Jau, das kenne ich aber der IE 6 anscheinend nicht ...
|
Ich vermute immer noch, dass du nicht berücksichtigt hast, mit welcher Art von Kindelement du es jeweils zu tun hast. (Mein "Beachten Sie", auf das ich hinaus wollte, ist übrigens ein leicht anderes als dein zitiertes - mal 'ne aktuelle SELFHTML-Version ziehen?)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

24-11-2006, 11:21
|
mcmurphy
PHP Junior
|
|
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
|
|
Zitat:
Ich vermute immer noch, dass du nicht berücksichtigt hast, mit welcher Art von Kindelement du es jeweils zu tun hast
|
Das wollte ich ja hiermit:
PHP-Code:
for(i=0; i< target.length - 1; i++){
target[i].firstChild.nextSibling.style.display = "none";
alert(target[i].firstChild.nextSibling.nodeType);
}
rausbekommen.
Aber Wahsaga hat wie (fast  )immer recht (mein SelfHtml ist 8.0, aktuell ist 8.1.1):
habe im Code jetzt mal sämtliche Umbrüche rausgenommen, jetzt geht's ohne length - 1.
Da scheint der IE mal als einziger Standard konform zu arbeiten
Aber so kann der Code nicht bleiben, diese ellenlange Zeile kann ja keinMensch warten.
Suche mal die explizite Stelle und werde das Ergebniss hier posten.
__________________
"I don't want to belong to any club that would accept me as a member."
Groucho Marx
|

24-11-2006, 11:41
|
mcmurphy
PHP Junior
|
|
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
|
|
Also, wenn es interessiert:
Statt:
PHP-Code:
</ul>
</li>
</ul>
<script type="text/javascript">initNewsArchive();</script>
</div>
PHP-Code:
</ul>
</li></ul><!-- -->
<script type="text/javascript">initNewsArchive();</script>
</div>
Frage an Wahsaga:
das hätten mir die Browser aber doch mit dem Code schnipsel aus meinem letzten Post anzeigen müssen (>> nodeType)
Zitat:
Gemäß dem DOM stellt bereits ein Zeilenumbruch oder ein Leerzeichen im Quelltext zwischen Elementknoten einen eigenen Text-Kindknoten dar.
|
Text-Kindknoten >> nodeType == 3
__________________
"I don't want to belong to any club that would accept me as a member."
Groucho Marx
|

24-11-2006, 12:51
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Ich verstehe immer noch nicht, warum du's dir so kompliziert machst.
Wozu überhaupt jedes Mal alle in Frage kommenden Knoten durchlaufen?
Da merke ich mir doch lieber, welches Element ich zuletzt sichtbar gemacht habe - und wenn dann ein neues sichtbar gemacht werden soll, mache ich dabei das vorherige wieder unsichtbar.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

24-11-2006, 13:14
|
mcmurphy
PHP Junior
|
|
Registriert seit: Aug 2003
Ort: Berlin
Beiträge: 890
|
|
Zitat:
Da merke ich mir doch lieber, welches Element ich zuletzt sichtbar gemacht habe
|
müßte ich dafür nicht id's vergeben?
Genau das wollte ich vermeiden....
Aber es klappt ja jetzt ...
Fand auch den Ansatz einfacher:
- Resete alles
- Mach das ausgewählte sichtbar
BTW: THX
__________________
"I don't want to belong to any club that would accept me as a member."
Groucho Marx
|

24-11-2006, 13:38
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Zitat:
Original geschrieben von mcmurphy
müßte ich dafür nicht id's vergeben?
|
Nein - nur die Elementreferenzen merken. (Schrieb ich dir das nicht letztens schon mal - oder war's bei jemand anderem?)
Zitat:
Fand auch den Ansatz einfacher:
- Resete alles
- Mach das ausgewählte sichtbar
|
Finde ich nicht merkbar einfacher - abgesehen davon, dass es natürlich weniger perfomant ist (auch wenn sich das hier kaum bemerkbar machen dürfte).
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
Aktuelle PHP Scripte
Homepagetools 2022
Kostenloses Gästebuch und Homepagetools für die eigene Homepage.
Bei GuxDu kann man sich kostenlos die Websitetools auf die vorhandene Website einbauen. Zudem kann man bei GuxDU auch eine eigene Homepage mit 3D Effekten erstellen. GuxDu ist kostenlos.
29.04.2022
freepler | Kategorie: PHP/ Gaestebuch
|
SF-Shopsystem V1.0
Hier haben wir ein einzigartiges Shopsystem in PHP.
Die Anzahl der Artikel ist unbegrenzt, einfach zu bedienen und erklärt sich.
Ausführliche Beschreibung weiter unten.
28.04.2022
Speedcrawler | Kategorie: PHP/ Shops
|
Anzeigen Markt mit PayPal Bezahl System
Anzeigen Markt Script
mit PayPal Bezahl System
Der Benutzer hat die Möglichkeit sofort nach Bezahlung mit PayPal
seine Anzeigen zu schalten, je nach seinem Guthaben.
27.04.2022
Webace_de | Kategorie: PHP/ Anzeigenmarkt
|
Alle PHP Scripte anzeigen
|