Prüfen ob ein Link ein richtiger Link ist?

DataFox

Erfahrenes Mitglied
Hi

ich will prüfen ob ein Link ein richtiger Link ist, also einer, wo der Browser einem Ziel folgt.

Angenommen, ich habe 3 A-Tags in meinem Dokument, die ich per getElementById ermittelt und link1, link2 sowie link3 zugewiesen habe:

Code:
var link1.href = 'http://www.tutorials.de';
var link2.href = '#irgendEinAnker';
var link3.href = 'javascript:alert(2342)';

Wenn es so ein Link ist, das der Browser einem Ziel folgt - also ein ganz normaler Link, dann soll mir die Funktion ein boolsches true zurück geben.

Ich bin iwi zu blöd die Raute am Anfang des Strings vom href-Attribut zu erkennen...

mit

Code:
		if(meinLink.href.indexOf("javascript:") == -1 && meinLink.href.indexOf("#") != 0) {
			alert("yeah, das ist einer!");
		} else {
			alert("ne du, das ist kein richtiger link...");
		}

Bei einem A-Tag der so aussieht:

Code:
<a href="#irgendeinanger">guckste unten...</a>

klappt das nicht. indexOf gibt mir hier eine 36 zurück. Müsste doch eigentlich eine 0 sein, oder eine 1, je nach dem...

Kann mir einer der JavaScript-Gurus hier einen heissen Tipp geben? :)

danke
Laura
 
indexOf gibt mir hier eine 36 zurück. Müsste doch eigentlich eine 0 sein, oder eine 1, je nach dem...

Da irrst du :-)

egal, was du bei href reinschreibst(mal von dem javascript:-Zeugs abgesehen)...wenn du dort einen relativen Pfad oder einen Ankernamen notierst, übersetzt das der Browser in den absoluten Pfad....du kannst das ja mal prüfen, indem du dir das href-Attribut bei dem Anker per alert ausgeben lässt.

Workaround: entferne aus dem href-Attribut per replace() vom Anfang den Wert von window.location

...beginnt dann das, was übrigbleibt, mit einer Raute, handelt es sich um einen Verweis zu einem Anker im aktuellen Dokument.
 
cool - das hat funktioniert. Danke!! :)

Mir ist dabei nur noch ein ganz kleiner Bug aufgefallen... falls (kann ja sein) der User schon mal auf den Anker-Link geklickt hat, und in der Browser-Adresszeile dieser link mit dem Anker steht, und er dann nochmal auf den Link klickt, löscht die replace-Funktion alle - auch den Anker. Und die Grundlage für die Analyse ob es ein richtiger Link oder ein Anker-Link ist, ist weg. Und das Skript erkennt es dann als normalen Link.

Gibts da einen schlauen Trick wie man nur bis zum ersten auftauchenden Anker alles replacen kann?

Gruß
Laura
 
Du könntest zuerst per match() prüfen, ob in href überhaupt ein Anker vorhanden ist(wenn nicht, kannst du dir das replace() ja eh sparen)...bleibt dann nach dem replace() nichts mehr übrig, war es ein Anker im aktuellen Dokument, wo du zuvor hingesprungen bist :-)
 

Neue Beiträge

Zurück