Felix Riesterer: Funktion nach Sprung zu Anker ausführen?

Beitrag lesen

Lieber Andreas,

ich kann Dir vielleicht helfen. Ich hatte ein ganz anderes Problem zu lösen und musste daher diese zum-Anker-springen-Funktionalität mittels Javascript nachbilden. Das folgende Script ersetzt Verweisziele der Art "#Anker" in "{gegenwärtige URL}?a=Anker", berücksichtigt also keine Verweisziele, bei denen vor dem Ankernamen noch eine Datei angegeben ist (z.B. seite.html#Anker). Dort müsstest Du vielleicht noch Anpassungen vornehmen.

Das Script wird einfach in jede HTML-Datei eingebunden, in der diese Funktionalität erwünscht ist.

----file: "to_anchor.js"----

(function () {  
    // Aufruf mit Anker? Dann nach dem Laden zum entsprechenden Element vorscrollen!  
    if (window.location.search.match(/\?a=/i)) {  
        var a = window.location.search.replace(/^.*a=([^&=]+).*$/i, "$1"),  
            elm = document.getElementById(a),  
            elms = document.getElementsByName(a);  
  
        if (!elm && elms && elms.length > 0) {  
            elm = elms[0];  
        }  
  
        if (elm) {  
            window.scrollBy(0, elm.offsetTop);  
            /*  
               Hier könnte weiterer Code folgen...  
            */  
        }  
    }  
  
    // Alle Verweise mit Anker entsprechend korrigieren  
    var i, a, atts, url,  
        baseURL = window.location.pathname;  
  
    for (i = 0; i < document.links.length; i++) {  
        url = '';  
  
        // originalen href-Wert holen  
        if (document.links[i].href.match(/#.+/)) {  
            atts = document.links[i].attributes;  
            for (a = 0; a < atts.length; a++) {  
                if (atts[a].nodeName.match(/^href$/i)) {  
                    url = atts[a].nodeValue;  
                }  
            }  
  
            if (url != '') {  
                if (url.match(/^#/)) {  
                    // URL verweist auf dieselbe Seite: Pfad ergänzen!  
                    url = window.location.pathname + url;  
                }  
  
                document.links[i].href = url.replace(/^(.*)#.+$/i, "$1")  
                    + "?a="  
                    + url.replace(/^.*#([^#]+)$/i, "$1");  
            }  
        }  
  
    }  
} ()  
)

Liebe Grüße aus Ellwangen,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)