Wie zum extrahieren von hash-substring-Werte von Fenster.Lage und schreiben Sie Sie in HTML?

Ich versuche, Extrakt hash substring-Werte von Fenster.Lage und schreiben Sie Sie in das HTML-Format für die Benutzer, um zu sehen,, mit einer URL-syntax, die verbietet den Einsatz von ? als query-string-Trennzeichen.

Also ich arbeite mit dieser einfachen Seite:

<html>

<input type="button" id="test" value="Test" />
<!-- input buton is here just to test the script -->

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>

<script>
$(function() {
    $('#test').click(function() {
        window.location = (window.location);
        GetURLParameter('source');  
    });
});

function GetURLParameter(sParam) {
    var sPageURL = window.location.hash.substring(1);
    var sURLVariables = sPageURL.split('&');
    for (var i = 0; i < sURLVariables.length; i++) {
        var sParameterName = sURLVariables[i].split('=');
        if (sParameterName[0] == sParam) {
            alert(sParameterName[1]);
            return sParameterName[1];
        }
    }
} 
</script>

</html>

Rufe ich die Seite mit einer URL, die so aussieht, das das client-Fenster.Ort:

http://example.com/pagename.html#source=FOO&medium=BAR&campaign=FRED

Möchte ich schreiben FOO, BAR, FRED in die Seite, so dass der Benutzer es sehen können.

(beachten Sie, keine ? in der URL als query-string-Trennzeichen, nur #)

... Auf die Eingabe-Taste, klicken Sie auf, bekomme ich eine erfolgreiche Warnung (wie erwartet) zeigt, dass die Quelle "FOO" aus der URL. Toll.

Aber wie bekomme ich die anderen beiden SParamaterNames, und dann wie kann ich schreiben Sie Sie in die Seite als HTML - für den Benutzer zu sehen, anstatt wieder eine Warnung?


UPDATE UPDATE UPDATE (unten)

Danke an @sam-Bäcker!! ... Tolle Antwort. Ich habe Ihre erste Beispiel, änderte aber die ersten beiden Zeilen in Ihrem code zu $(window).load(function() { so, dass das Skript ausgeführt wird, onload, das war meine Absicht.

So, ich bin immer noch über die gleiche URL:

http://example.com/pagename.html#source=FOO&medium=BAR&campaign=FRED

Aber ich wollen, legen Sie die hash-substring-Werte in hardcoded HTML, wie diese:

<body>
<span class="style1">$need_source_value_here</span><br />
<span class="style1">$need_medium_value_here</span><br />
<span class="style3">$need_campaign_value_here</span><br />

Ich style jeden Wert einzeln, durch hardcoding span oder div-styles in HTML.


UPDATE UPDATE UPDATE

Hier ist die Lösung:

Treffer die folgende einfache Seite in einem code-Beispiel wurde mit dieser URL-syntax, und es wird die Ausgabe der substring-vars, die der user, onload, wo immer Sie wollen, dass Sie auf die Seite.

http://example.com/pagename.html#dyntext=FOO+MAN+CHU&dynterm=BAR+HOPPING&dynimage=FRED+IS+DEAD



<html>
<body>

<span id="dyntext-span" style="font-weight: bold;"></span><br />
<span id="dynterm-span" style="font-style: italic;"></span><br />
<span id="dynimage-span" style="text-decoration: underline;"></span><br />

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>

<script>
$(document).ready(function() {
        var tags = ["dyntext", "dynterm", "dynimage"];
        for (var i = 0; i < tags.length; ++i) {
            var param = GetURLParameter(tags[i]);
            if (param) {
                var dyntext = GetURLParameter('dyntext');
                var dynterm = GetURLParameter('dynterm');
                var dynimage = GetURLParameter('dynimage');
            }
        }

        var elem = document.getElementById("dyntext-span");
        var text = document.createTextNode(dyntext);
        elem.appendChild(text);
        var elem = document.getElementById("dynterm-span");
        var text = document.createTextNode(dynterm);
        elem.appendChild(text);
        var elem = document.getElementById("dynimage-span");
        var text = document.createTextNode(dynimage);
        elem.appendChild(text);     
});

function GetURLParameter(sParam) {
    var sPageURL = window.location.hash.substring(1);
    var sURLVariables = sPageURL.split('&');
    for (var i = 0; i < sURLVariables.length; i++) {
        var sParameterName = sURLVariables[i].split('=');
        if (sParameterName[0] == sParam) {
            return sParameterName[1];
        }
    }
}

</script>

</body>
</html>

Hatte einige crossbroswer Probleme, weil innerText ist nicht von Firefox unterstützt, die nicht wollen, befassen sich mit cross-browser-fallback zu textContent usw, so ging DOM-Baum und erstellt text-Knoten ersetzen, der + unicode-Zeichen mit Leerzeichen. Hoffe, dies ist nützlich für Sie!

InformationsquelleAutor Rowe Morehouse | 2012-08-30

Schreibe einen Kommentar