document.getelementsbyclassname
User1989
- javascript
Hallo, ich habe ein JavaScript Code programmiert, welches in Firefox funktioniert. In Internet Explorer kriege ich aber leider den Fehler, dass
der Befehl document.getElementsByClassName nicht unterstützt wird.
Was kann ich als Ersatz in mein Code reinschreiben?
Hi!
Was kann ich als Ersatz in mein Code reinschreiben?
Das Richtige.
Mann! Wer soll denn bitte mit Deiner vagen Beschreibung etwas anfangen können?
off:PP
Hi!
Was kann ich als Ersatz in mein Code reinschreiben?
Das Richtige.
Mann! Wer soll denn bitte mit Deiner vagen Beschreibung etwas anfangen können?
off:PP
Was soll ich noch angeben?
@@User1989:
nuqneH
Was soll ich noch angeben?
Zunächst einmal den Sinn dahinter: Was willst du mit allen Elemente dieser Klasse anstellen?
Qapla'
Mahlzeit User1989,
Was kann ich als Ersatz in mein Code reinschreiben?
MfG,
EKKi
Mahlzeit User1989,
Was kann ich als Ersatz in mein Code reinschreiben?
MfG,
EKKi
Haahahaha... Habe es mittlerweile schon gelöst danke
@@User1989:
nuqneH
Haahahaha...
Du solltest nicht die Antwortenden auslachen, sonst antwortet dir blad niemand mehr. Wenn hier was lächerlich ist, dann deine Fragen.
Habe es mittlerweile schon gelöst danke
Wenn du zeigen würdest, wie und warum, dann könnte man auch drüberschauen, ob du es _gut_ gelöst hat.
Qapla'
PS: Zitiere bitte sinnvoll, nicht alles!
Du solltest nicht die Antwortenden auslachen, sonst antwortet dir blad niemand mehr. Wenn hier was lächerlich ist, dann deine Fragen.
Ich habe nicht Ekki ausgelacht, sondern über die Seite LMGTFY. Sorry, wenn es missverständlich war.
PS: Zitiere bitte sinnvoll, nicht alles!
Okay.
»»Wenn hier was lächerlich ist, dann deine Fragen.
Findest du meine Frage lächerlich? Oder nur unzureichend gestellt?
Hallo,
Findest du meine Frage lächerlich?
nein, das nicht.
Oder nur unzureichend gestellt?
Eventuell, ja.
Vielmehr habe ich aber den Eindruck, dass es dir am prinzipiellen Verständnis fehlt. Ich habe den Eindruck, du sammelst hier und da ein paar Code-Stückchen auf und flickst sie zusammen, ohne zu verstehen, was sie eigentlich tun. Denn mit etwas eigener Überlegung wäre dieser Thread hier überflüssig gewesen. Sobald man versteht, was getElementsByClassName() eigentlich tut, wäre es ein Leichtes, diese Funktion unter Verwendung von getElementsByTagName() nachzubauen.
Mal abgesehen davon, dass man durch eigene Suche auch diverse fertig implementierte Beispiele für getElementsByClassName() hätte finden können.
So long,
Martin
@@User1998:
nuqneH
Findest du meine Frage lächerlich?
Diese nicht. Vielleicht einige andere von dir.
Oder nur unzureichend gestellt?
Das ja.
Die Frage nach dem Warum steht immer noch unbeantwortet im Raum.
Wenn es bspw. dein Ziel ist, alle Elemente einer Klassed dynamisch ein anderes Aussehen zu geben, ist getElementsByClassName
kein guter Weg.
Qapla'
@@User1998:
nuqneH
Findest du meine Frage lächerlich?
Diese nicht. Vielleicht einige andere von dir.
Oder nur unzureichend gestellt?
Das ja.
Die Frage nach dem Warum steht immer noch unbeantwortet im Raum.
Wenn es bspw. dein Ziel ist, alle Elemente einer Klassed dynamisch ein anderes Aussehen zu geben, ist
getElementsByClassName
kein guter Weg.Qapla'
Ohne beispiele zu nennen, kann man vieles sagen. Welche Fragen denn genau?
Aber lassen wir es bleiben. Ich stelle in Zukunft zu meinen Problemen mehr Informationen bereit. Auf jeden Fall danke für Hilfen.
@@User1989:
nuqneH
Ohne beispiele zu nennen, kann man vieles sagen. Welche Fragen denn genau?
Welcher Teil der Frage „Was willst du mit allen Elemente dieser Klasse anstellen?“ war denn unverständlich?
Qapla'
PS: Zitiere bitte sinnvoll, nicht alles!
Hallo User1989,
document.getElementsByClassName
funktioniert nicht in allem Browsern. Eine Internetsuche sollte aber reichlich Browserübergreifende Varianten liefern, hier mal meine:
var JB_getElementsByClass_TagName=function(tagname,classname) {
var tag=document.getElementsByTagName(tagname);
var Elements=new Array();
for(var i=0;i<tag.length;i++) {
if(tag[i].className.indexOf(classname)>-1) Elements[Elements.length]=tag[i];
}
return Elements;
}
setzt das aber nicht ungeprüft ein, versuch den Code zu verstehen. Und wenn du eine bessere Variante findest, nimm die.
Gruß, Jürgen
Hi,
var JB_getElementsByClass_TagName=function(tagname,classname) {
var tag=document.getElementsByTagName(tagname);
var Elements=new Array();
for(var i=0;i<tag.length;i++) {
if(tag[i].className.indexOf(classname)>-1) Elements[Elements.length]=tag[i];
}
return Elements;
}
>
> setzt das aber nicht ungeprüft ein,
Setze das gar nicht ein!
ein einfaches indexOf im class-Attribut ist NICHT ausreichend.
Suche nach Klasse "bla" in class="blabla" liefert einen Treffer, der nicht geliefert werden dürfte - denn das Element gehört NICHT zur Klasse "bla".
cu,
Andreas
--
[Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)
[O o ostern ...](http://ostereier.andreas-waechter.de/)
Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
Hallo MudGuard,
ein einfaches indexOf im class-Attribut ist NICHT ausreichend.
stimmt, aber in meinem Fall ist es sogar erwünscht. "It's not a bug, it's a feature." Ich habe nur nicht mehr dran gedacht. Eine Suche mit regulärem Ausdruck und der Option "\b" wäre im allgemeinen Fall wohl besser.
Gruß, Jürgen
[latex]Mae govannen![/latex]
ein einfaches indexOf im class-Attribut ist NICHT ausreichend.
stimmt, aber in meinem Fall ist es sogar erwünscht. "It's not a bug, it's a feature."
It's always a bug. Du kannst nicht sicherstellen, daß eine bestimmte Zeichenkette nicht "versteckt" innerhalb einer anderen Zeichenkette vorkommt und man sie übersieht. (Siehe das berühmte Beispiel arsch und Marschgepäck) Heißt: Du mußt bei jedem vergebenen Klassenbezeichner sämtliche Anderen prüfen. Oder du hast sehr schnell ein Element mit in der Kollektion, das du eigentlich gar nicht haben wolltest.
Ich habe nur nicht mehr dran gedacht. Eine Suche mit regulärem Ausdruck und der Option "\b" wäre im allgemeinen Fall wohl besser.
Ich weiß nicht mehr (und kann es gerade nicht testen), ob es nur \w war oder auch \b oder beide oder keines davon je nach Browser oder allgemein Probleme mit Zeichen außerhalb der ASCII-Raumes haben. Das würde also wiederum eine Einschränkung der möglichen Klassenbezeichner darstellen.
reg = new RegExp('(^|\\s)' + class_name + '(\\s|$)', 'gi');
dürfte es tun, zumindest solange man Standard-Leerzeichen oder Tab zur Trennung benutzt, da auch \s nicht bei allen Browsern gleich belegt ist.
Stur lächeln und winken, Männer!
Kai
Hallo,
Ich habe nur nicht mehr dran gedacht. Eine Suche mit regulärem Ausdruck und der Option "\b" wäre im allgemeinen Fall wohl besser.
Ich weiß nicht mehr (und kann es gerade nicht testen), ob es nur \w war oder auch \b oder beide oder keines davon je nach Browser oder allgemein Probleme mit Zeichen außerhalb der ASCII-Raumes haben.
\w ist von JavaScript 1.3 bis ECMAScript 5.1 als [A-Za-z0-9_] definiert. Nicht-ASCII-Zeichen waren immer außen vor. Da das so simpel ist, setzen es m.W. auch alle Browser so um. Das ausschließlich zu verwenden, um Klassennamen zu erkennen bzw. zu trennen, ist tatsächlich keine gute Idee.
Für \b (als Word-Boundary, nicht als Backspace) finde ich gerade nicht die Definition in ES5, ist das überhaupt standardisiert?
Mathias
Hallo molily,
Für \b (als Word-Boundary, nicht als Backspace) finde ich gerade nicht die Definition in ES5, ist das überhaupt standardisiert?
ich habe etwas experimentiert, \b hat bei mir im FF nicht den gewünschten Effekt gezeigt. Das kann aber auch an mir liegen.
Gruß, Jürgen
Hi Mathias,
Für \b (als Word-Boundary, nicht als Backspace) finde ich gerade nicht die Definition in ES5, ist das überhaupt standardisiert?
Ein Stückchen über der von dir referenzierten Stelle, bei den Assertions: http://es5.github.com/#x15.10.2.6
Die dort verwendete abstrakte Operation IsWordChar definiert aber ausschließlich die lateinischen Klein- und Großbuchstaben, Ziffern und _ als Wort-Zeichen.
MfG ChrisB
P.S.:
Die dort verwendete abstrakte Operation IsWordChar definiert aber ausschließlich die lateinischen Klein- und Großbuchstaben, Ziffern und _ als Wort-Zeichen.
Also analog zu \w, worauf du ja bereits verwiesen hattest - was ja auch recht logisch ist.
MfG ChrisB
Danke für die Aufklärung!
Mathias
@@ChrisB:
nuqneH
Die dort verwendete abstrakte Operation IsWordChar definiert aber ausschließlich die lateinischen Klein- und Großbuchstaben, Ziffern und _ als Wort-Zeichen.
Qapla'
Brendan Eich hatte 1996 nicht an I18n gedacht – und falls doch, Netscape 2 hatte ohnehin nur limitierte Unicode-Unterstützung. Demnach sind \w und \b seit 1996 so definiert, in Zukunft wird es höchstens andere Escapes geben, um Unicode-Zeichen aus bestimmten Kategorien auszuwählen.
Mathias
@@molily:
nuqneH
Brendan Eich hatte 1996 nicht an I18n gedacht
Lass mich raten: Er hatte niemals eine Freundin namens Zoë. Und naïve ist für ihn ein Fremdwort.
Qapla'
Hallo,
Brendan Eich hatte 1996 nicht an I18n gedacht
Lass mich raten: Er hatte niemals eine Freundin namens Zoë.
und selbst wenn: Die würde sich im Englischen (auch im Amerikanischen) möglicherweise auch ohne Trema schreiben, wie man an den Namen diverser Schauspielerinnen sieht.
Und naïve ist für ihn ein Fremdwort.
Da wiederum ist den Briten wie den Amerikanern die Schreibweise mit Trema wohl geläufig, sie wird aebr nicht konsequent verwendet.
Ciao,
Martin
Lass mich raten: Er hatte niemals eine Freundin namens Zoë.
Nicht notwendig. 1996 nannte sie vielleicht noch zärtlich Zoë bzw. Zo\u00EB.
Mathias
Hi,
ein einfaches indexOf im class-Attribut ist NICHT ausreichend.
stimmt, aber in meinem Fall ist es sogar erwünscht. "It's not a bug, it's a feature." Ich habe nur nicht mehr dran gedacht.
Auch dann noch, wenn class="ablage" gesetzt ist, und nach "bla" gesucht wird?
cu,
Andreas
Hallo MudGuard,
ihr habt ja recht, aber ich habe dieses Script seit ca. 4 Jahren im Einsatz, die Klassennamen sind aber so speziell, dass es noch nie Kollisionen gegeben hat. Aber natürlich bleibt ein für mich akzeptables Restrisiko.
Gruß, Jürgen
Mahlzeit JürgenB,
Eine Suche mit regulärem Ausdruck und der Option "\b" wäre im allgemeinen Fall wohl besser.
Ausgehend von Zitat 1418:
Was spricht im vorliegenden Fall gegen ein einfaches:
var classes = element.className.split(' ');
MfG,
EKKi
@@EKKi:
nuqneH
Was spricht im vorliegenden Fall gegen ein einfaches:
var classes = element.className.split(' ');
Dass es zu einfach ist. Klassenbezeichner könne auch durch andere Whitespace-Zeichen getrennt sein.
Qapla'