Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2008 Teil von März

SELFHTML Forumsarchiv
relatven Pfad von Link ermitteln.

Informationsseite
  1. Seite (JAVASCRIPT) relatven Pfad von Link ermitteln. von Andreas D, 30. 03. 2008, 01:11
nach unten

relatven Pfad von Link ermitteln.

Die folgende Nachricht zum Thema stammt von: Andreas D, 30. 03. 2008, 01:11

wenn ich mit JavaScript z.B mit

document.getElementsByTagName("a")[5].href

das Ziel aus einem Link auslese bekomme ich immer einen absoluten Pfad. Auch wenn z.B. im Dokument etwas in der Art steht:

<a href="seiten/bsp.hrml">Beispielseiten<a>

Ich bräuchte aber eigentlich einen relativen Pfad. Also was könnte ich tun?
Ich hoffe mir kann jemand einen Tipp geben.
Vielen Dank schon mal im Voraus.

nach obennach unten

relatven Pfad von Link ermitteln.

Die folgende Nachricht zum Thema stammt von: Cheatah, 30. 03. 2008, 01:39

Hi,

»» Ich bräuchte aber eigentlich einen relativen Pfad. Also was könnte ich tun?

das Attribut mittels getAttribute() auslesen, nicht die generierte href-Eigenschaft verwenden. Beachte, dass der IE bis (IIRC) einschließlich Version 7 bei dieser leichten Übung versagt.

Cheatah

--
X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes

nach obennach unten

relatven Pfad von Link ermitteln.

Die folgende Nachricht zum Thema stammt von: Andreas D, 30. 03. 2008, 03:19

schon mal besser. Mit getAttribute("href") bekomme ich den relativen Pfad. Aber leider nicht im IE. Da bekomme ich auch mit getAttribute("href") auch nur absolute Pfade.
Hat vielleicht noch jemand ne Idee was ich mit dem IE machen könnte (mal wieder laut aber MS fluchen)?

nach obennach unten

relatven Pfad von Link ermitteln.

Die folgende Nachricht zum Thema stammt von: ChrisB, 30. 03. 2008, 04:40

Hi,

»» Ich bräuchte aber eigentlich einen relativen Pfad. Also was könnte ich tun?

Stringfunktionen bemuehen, um das "unerwuenschte" wegzuschneiden.

MfG ChrisB

nach obennach unten

relatven Pfad von Link ermitteln.

Die folgende Nachricht zum Thema stammt von: Andreas D, 30. 03. 2008, 13:10

»» Stringfunktionen bemuehen, um das "unerwuenschte" wegzuschneiden.

Hab ich auch schon dran gedacht. Aber wie wies ich was ich vom absollen Pfad wegschneiden muss um einen relativen zu bekommen?

nach obennach unten

relatven Pfad von Link ermitteln.

Die folgende Nachricht zum Thema stammt von: Christian Seiler, 30. 03. 2008, 16:41

Hi,

»» »» Stringfunktionen bemuehen, um das "unerwuenschte" wegzuschneiden.
»»
»» Hab ich auch schon dran gedacht. Aber wie wies ich was ich vom absollen Pfad wegschneiden muss um einen relativen zu bekommen?

Naja, Du brauchst, um einen korrekten relativen Pfad zu berechnen, den Ausgangspfad des Dokuments.

Dann kannst Du das z.B. in folgende Funktion packen:

/*
 * Berechne einen relativen Pfad von quelle nach ziel
 */

function berechneRelativenPfad (ziel, quelle) {
    // wir gehen davon aus, dass es sich hier um absolute URIs
    // handelt wie bei file, http, https oder ftp

    // zuerst entfernen wir alles was '?' oder '#' beinhaltet
    var normalisiere = function (zeichenkette) {
        var i1 = zeichenkette.indexOf ('?');
        var i2 = zeichenkette.indexOf ('#');
        if (i1 != -1) {
            if (i2 != -1 && i2 < i1) {
                return [zeichenkette.substr (0, i2), zeichenkette.substr (i2)];
            } else {
                return [zeichenkette.substr (0, i1), zeichenkette.substr (i1)];
            }
        } else if (i2 != -1) {
            return [zeichenkette.substr (0, i2), zeichenkette.substr (i2)];
        } else {
            return [zeichenkette, ''];
        }
    }

    quelle = normalisiere (quelle);
    ziel = normalisiere (ziel);
    // zuerst trennen wir beide Angaben nach / auf.
    var zielKomponenten = ziel[0].split ('/');
    var quellKomponenten = quelle[0].split ('/');
    // nun sehen wir uns die gleichen komponenten an
    var i;
    for (i = 0; i < zielKomponenten.length && i < quellKomponenten.length; i++) {
        if (zielKomponenten[i] != quellKomponenten[i]) {
            break;
        }
    }
    // pfade identisch
    if (i == zielKomponenten.length && i == quellKomponenten.length) {
        // gib nur anker o.ä. zurück
        if (ziel[1].length) {
            return ziel[1];
        }
        // Linkziel endet nicht auf /, damit können wir einfach die letzte
        // Komponente zurückgeben
        if (zielKomponenten[i-1].length) {
            return zielKomponenten[i-1];
        }
        // Ok, Linkziel endet auf / und ist identisch zur Linkquelle
        // Also ./ zurückgeben
        return './';
    }
    var ausgabe = '';
    // suche dir einen Weg zurückn
    for (var j = i; j < quellKomponenten.length - 1; j++) {
        ausgabe += '../';
    }
    ausgabe += zielKomponenten.slice (i).join ('/');
    // hänge ?... oder #... noch ran
    return ausgabe + ziel[1];
}


Sie ist nicht perfekt - andere Hostnamen erkennt sie zum Beispiel nicht (d.h. wenn es wirklich ein komplett absoluter Link ist). Und man kann das sicher noch eleganter scheiben, das war eher ein Schnellschuss von mir. Aber sie liefert für Links auf dem gleichen Server (oder lokale Links) das korrekte Ergebnis:

js> berechneRelativenPfad ('hallo/die/welt/ist/schoen', 'hallo/das/welt/ist/schoen?b=c/d')
../../../die/welt/ist/schoen
js> berechneRelativenPfad ('hallo', 'hallo')
hallo
js> berechneRelativenPfad ('hallo?a=b', 'hallo?a=b')
?a=b
js> berechneRelativenPfad ('http://de.selfhtml.org/xml/index.htm', 'http://de.selfhtml.org/javascript/index.htm')
../xml/index.htm


usw. usf.

Viele Grüße,
Christian

--
Mein "Weblog" [RSS]
Using XSLT to create JSON output (Saxon-B 9.0 for Java)

nach obennach unten

relatven Pfad von Link ermitteln.

Die folgende Nachricht zum Thema stammt von: Andreas D, 30. 03. 2008, 18:56

vielen Dank für die Arbeit. So was in der Art werde ich wohl machen müssen.
Habe gehofft dass es eine einfachere Möglichkeit gibt.

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2008 Teil von März

© 1998-2006 Seite Impressum, Software: Classic Forum