getElementsbyClassName

Hallo liebe bplaced-Community, ich wende mich mal wieder
an die schlauen Köpfe unter euch.

Und zwar habe ich folgendes Problem:

Ich nutze in einem Javascript getElementsbyClassname,
da ich folgendes umsetzen “musste”:
20 Links () sollten beeinflusst werden,
der 21 Link aber nicht.
Deswegen habe ich den 20 Links eine Klasse gegeben,
dem 21 eine andere.

Dies funktioniert auch super, aber leider nur im Mozilla Firefox.

Der IE sagt mir:
“Das Objekt unterstützt diese Eigenschaft oder Methode nicht”.

Hab ich schön gegoggelt, habe gefunden:
function getElementsByClassName(clsName, parentElem)
{
if(document.getElementsByClassName)
{
return parentElem ? parentElem.getElementsByClassName(clsName) : document.getElementsByClassName(clsName);
}

var i, elem, f = [],
   	rex = new RegExp("(^|\\s)" + clsName + "(\\s|$)");
var childElems = parentElem ? parentElem.getElementsByTagName("*") : document.getElementsByTagName("*");

for (i = 0;( elem = childElems[i]); i++) 
{
		if(elem.className.match(rex)) 
	{ 
		f.push(elem); 
	}
}
return f;

}

rufe dann die Funktion so auf:

var a = xxxx.getElementsByClassName(“new”,“a”);

Dennoch klappt es nicht…

Kann mir jemand weiterhelfen?

Freundliche Grüße

[quote=“headhunt3r”]Ich nutze in einem Javascript getElementsbyClassname,
da ich folgendes umsetzen “musste”:
20 Links () sollten beeinflusst werden,
der 21 Link aber nicht.
Deswegen habe ich den 20 Links eine Klasse gegeben,
dem 21 eine andere.[/quote]
Ich würd’ einfach alle Links durchlaufen, und dabei den einen unbehandelt lassen; und diese Entscheidung über die Klasse, die dieser eine Link hat, treffen - dieser eine Link ist der spezielle, nicht alle anderen, also wäre es viel sinnvoller, diesen durch eine entsprechende Klasse zu kennzeichnen.

„Klappt nicht” ist keine brauchbare Problembeschreibung.

[quote=“headhunt3r”]
Dies funktioniert auch super, aber leider nur im Mozilla Firefox.

Der IE sagt mir:
“Das Objekt unterstützt diese Eigenschaft oder Methode nicht”.

Hab ich schön gegoggelt, habe gefunden:
function getElementsByClassName(clsName, parentElem)
{
if(document.getElementsByClassName)
{
return parentElem ? parentElem.getElementsByClassName(clsName) : document.getElementsByClassName(clsName);
}

var i, elem, f = [],
   	rex = new RegExp("(^|\\s)" + clsName + "(\\s|$)");
var childElems = parentElem ? parentElem.getElementsByTagName("*") : document.getElementsByTagName("*");

for (i = 0;( elem = childElems[i]); i++) 
{
		if(elem.className.match(rex)) 
	{ 
		f.push(elem); 
	}
}
return f;

}

rufe dann die Funktion so auf:

var a = xxxx.getElementsByClassName(“new”,“a”);

Dennoch klappt es nicht…

Kann mir jemand weiterhelfen?

Freundliche Grüße[/quote]

Wie oben schon beschrieben, es klappt alles perfekt, aber eben NUR im Firefox und meine Frage ist nun, ob jemand eine Alternative für getElementsbyClassName für den IE weiss?

Das “klappt nicht” hab ich oben schon geschrieben, da kommt nur diese Fehlermeldung vom IE.
(Sprich er erzeugt den Link einfach nicht so, wie es sein sollen und wie er es im Firefox macht bzw. erzeugt ihn einfach gar nicht)

Beispiel:
vorher war es so:
var a = Dias.getElementsByTagName(“a”);

==> da ich aber nicht alle ansprechen wollte, sondern nur 20 und den 21 (also jeweils den letzen Link) nicht, ging dies ja nicht mehr zu nutzen.
Diese Funktion kennt der IE aber noch.

Um aber meine Sache zu realisieren, musste ich auf:
var a = Dias.getElementsByClassName(“new”);
ausweichen, da ich sonst nicht wusste,
wie ich den einen letzten Link sonst ausschließen soll.
Aber soweit ich nun herausgefunden habe, kennt der IE
diese Funktion getElementsByClassName nicht.

Mein Problem liegt nun darin, hat jemand eine Alternative Lösung
für mein Problem oder weiss wie ich das für den IE doch noch mit
getElementsByClassName hinkriege?

Freundliche Grüße

Ich nannte bereits eine. (Und auch, warum sie m.E. vorzuziehen wäre.)

In dem du das, was du gefunden hast, mal richtig anwendest.
(Doku oder Beispiel sollte ja wohl dabei gewesen sein; und auch sonst ist es eigentlich ziemlich selbsterklärend.)

Ich nannte bereits eine. (Und auch, warum sie m.E. vorzuziehen wäre.)

In dem du das, was du gefunden hast, mal richtig anwendest.
(Doku oder Beispiel sollte ja wohl dabei gewesen sein; und auch sonst ist es eigentlich ziemlich selbsterklärend.)[/quote]

Nein es war kein Beispiel oder eine Doku dabei :-/.

Dann sag bzw. zeig mir doch bitte, was ich falsch anwende bzw. wo mein Fehler liegt.

[quote=“chrisb”]Ich würd’ einfach alle Links durchlaufen, und dabei den einen unbehandelt lassen; und diese Entscheidung über die Klasse, die dieser eine Link hat, treffen - dieser eine Link ist der spezielle, nicht alle anderen, also wäre es viel sinnvoller, diesen durch eine entsprechende Klasse zu kennzeichnen.
[/quote]

Wie lasse ich diesen “unbehandelt”?
Meinst du jetzt, einfach GetElementsbyTagName?
Aber da nimmt er doch alle, egal ob ein Link () eine Klasse hat oder nicht?

Weil ich will, dass alle 20 “benutzt” werden, der 21 sozusagen “ignoriert” werden soll, da dieser etwas anderes bewirkt.

Das Problem ist eben, dass der IE die Funktion nicht kennt, ich somit mit dieser auch nicht weiter komme wie es ausschaut.

Es wäre toll wenn du mir deine Lösung an einem Beispiel verdeutlichen würdest, da mir bis jetzt verschlossen bleibt, wie du es genau meinst.

Freundliche Grüße

[quote=“headhunt3r”]Nein es war kein Beispiel oder eine Doku dabei :-/.

Dann sag bzw. zeig mir doch bitte, was ich falsch anwende bzw. wo mein Fehler liegt.[/quote]
Der Fehler liegt darin, dass du annimmst, alle HTML-Elementobjekte hätten plötzlich diese Methode.

Warum hat die Funktion wohl zwei Parameter?

[quote]Wie lasse ich diesen “unbehandelt”?
Meinst du jetzt, einfach GetElementsbyTagName?
Aber da nimmt er doch alle, egal ob ein Link () eine Klasse hat oder nicht?[/quote]
Ja, genau - und diesen einen Link mit spezieller Klasse ignorierst du dann während der Verarbeitung einfach, eben auf Grund der Tatsache, dass er eine bestimmte Klasse besitzt.

[quote=“chrisb”][quote=“headhunt3r”]Nein es war kein Beispiel oder eine Doku dabei :-/.

Dann sag bzw. zeig mir doch bitte, was ich falsch anwende bzw. wo mein Fehler liegt.[/quote]
Der Fehler liegt darin, dass du annimmst, alle HTML-Elementobjekte hätten plötzlich diese Methode.

Warum hat die Funktion wohl zwei Parameter?
[/quote]

Könntest du mir es an einem Beispiel verdeutlichen?

Ich verwende diese Funktion in einer externen Javascript(.js)-Datei. Dort habe ich diese implementiert und dort wird sie auch aufgeurfen mittels
var a = xxxx.getElementsByClassName(“new”,“a”);

Ich übergebe ihr die zwei Parameter, einmal die Klasse “new” und als zweites das Element .

Worin liegt mein Denkfehler?

[quote=“chrisb”][quote=“headhunt3r”]Wie lasse ich diesen “unbehandelt”?
Meinst du jetzt, einfach GetElementsbyTagName?
Aber da nimmt er doch alle, egal ob ein Link () eine Klasse hat oder nicht?[/quote]
Ja, genau - und diesen einen Link mit spezieller Klasse ignorierst du dann während der Verarbeitung einfach, eben auf Grund der Tatsache, dass er eine bestimmte Klasse besitzt.[/quote]

Wie kann ich diesen einen Link den “ignorieren”?
Kannst du mir das bitte mal an einem Beispiel verdeutlichen?

Mit var a = xxxx.getElementsByTagName(“a”);
sprech ich ja alle an, wie ignorier ich dann diesen einen mit der Klasse?

Freundliche Grüße

[quote]Mit var a = xxxx.getElementsByTagName(“a”);
sprech ich ja alle an, wie ignorier ich dann diesen einen mit der Klasse?[/quote]
In dem du beim Abarbeiten all der Links, die getElementsByTagName liefert, einfach schaust, ob er eine bestimmte Klasse hat (und ihn dann einfach nicht weiter be-/verarbeitest).

[quote]Mit var a = xxxx.getElementsByTagName(“a”);
sprech ich ja alle an, wie ignorier ich dann diesen einen mit der Klasse?[/quote]
In dem du beim Abarbeiten all der Links, die getElementsByTagName liefert, einfach schaust, ob er eine bestimmte Klasse hat (und ihn dann einfach nicht weiter be-/verarbeitest).[/quote]

Kannst du mir nicht einfach mal ein Beispiel-Aufruf oder so etwas zeigen?

[b]Wie kann ich allen HTML-Elementobjekten diese Methode geben?

Ja und wie kann ich das schauen?[/b]

Ich weiss nicht weiter, die Lösungsansätze sind mir schon bewusst, aber ich weiss nicht wie ich diese umsetzen kann.

Im IE - gar nicht. (Nur mit hohem Aufwand bzw. nicht sinnvollen Methoden.)

de.selfhtml.org/javascript/objek … enschaften

Im IE - gar nicht. (Nur mit hohem Aufwand bzw. nicht sinnvollen Methoden.)

de.selfhtml.org/javascript/objek … enschaften[/quote]

So ich danke dir für deine Hilfe bzw. deine Tipps :hail: .

Ich habe nun endlich eine Lösung für mein Problem gefunden :slight_smile:, die auch 100% so funktioniert, wie sie soll (in allen Browsern).

Ich will sie natürlich niemanden vorenthalten, falls mal jemand ein ähnliches Problem hat:

ich habe in meiner php-Datei jedem Link, den es ansprechen/betreffen soll, einen Namen gegegeben (da das mit Klassen etc nicht funktioniert hat bei Links):

Bei dem Link, den es nicht betreffen soll, habe ich das Namens-Attribut weggelassen:

Nun habe ich im Javascript dann einfach die Links angesprochen (die es betreffen soll), indem ich:

var a = document.[b]getElementsByName/b;

gemacht habe.

So kann also geschlossen werden.

Freundliche Grüße