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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie nur Interesse an der ersten von den 3 Parametern verwenden:
Wenn Sie möchten, dass alle 3 Parameter, und Sie kennen die Namen, die Sie verwenden können:
Diejenigen hinzuzufügen, die vars zu der Seite, können Sie fügen Sie Sie in divs wie diese:
Version Abfragen jedes der 3 tags und erstellt ein neues div in der Seite für diesen tag mit dem tag-Wert als Inhalt.
Es fügt auch eine CSS-Klasse, query-string-Parameter zu diesen divs, so dass Sie können den Textstil - vermutlich werden Sie das tun wollen, und fügen Sie mehr HTML-Code, um die einzelnen div-denn es ist nicht klar, warum der text wird angezeigt.
Wenn Sie nicht wissen, die Abfrage-string-Schlüssel im Voraus (Quelle, medium und Kampagne), könnten Sie eine Funktion verwenden, die ich erstellt habe, GetAllURLParameters, dass gibt ein array von Objekten mit der Taste ("Quelle") und der Wert ("FOO") für jede param.
Das würde dann so Aussehen:
Was dann zeigt die Namen und Werte aller Abfrage-Parameter.
UPDATE
Da Sie bereits hardcoded HTML-Code, sieht wie folgt aus:
Am einfachsten legen Sie Ihre Werte wäre zum hinzufügen einer id zu jedem dieser umfasst:
Dann, nachdem Sie die Abfrage der Parameter, können Sie Sie wie folgt:
Sehr einfach in diesem Fall aktualisiert sich meine Antwort mit diejenigen, die verpasst. Suchen DOM-Elemente zu und ändern Sie diese einfach mit Javascript/DOM-APIs. Wenn Sie möchten, um alles, was jQuery verwenden (die ist wirklich nicht notwendig in diesem Fall), könnten Sie
$('#source-span').text(source)
stattdocument.getElementById('source-span').innerText = source;
. Das wäre ganz ein bisschen langsamer aber.Sam, du bist ein Gott unter den Menschen. Danke! ... die Veröffentlichung meiner letzten code als ein update zu meiner Frage.
InformationsquelleAutor Sam Baker