Ich möchte den Wert nach einem Hash in der URL der aktuellen Seite abrufen und ihn dann in einer neuen Funktion anwenden können ... z.
Die URL könnte sein
www.example.com/index.html#foo
Und ich möchte dies in Verbindung mit dem folgenden Code verwenden
$('ul#foo:first').show();
Ich gehe davon aus / hoffe, dass es eine Möglichkeit gibt, dies zu erfassen und es in eine Variable umzuwandeln, die ich dann im zweiten Code verwenden kann.
jquery
url
hash
fragment-identifier
Robbie White
quelle
quelle
'ul#foo:first'
keinen Sinn , da IDs müssen eindeutig sein, damit das Hinzufügen:first
zu dem Selektor ist überflüssig, es sei denn , Sie IDs sind Vervielfältigungen , die ungültig ist. Beachten Sie, dass wiederholte IDs noch vor einem Jahrzehnt ungültig waren.Antworten:
Mit der
location.hash
Eigenschaft können Sie den Hash der aktuellen Seite abrufen:Beachten Sie, dass diese Eigenschaft das
#
Symbol bereits am Anfang enthält.Tatsächlich benötigen Sie den
:first
Pseudo-Selektor nicht, da Sie den ID-Selektor verwenden . Es wird davon ausgegangen, dass IDs innerhalb des DOM eindeutig sind .Wenn Sie den Hash von einer URL-Zeichenfolge abrufen möchten, können Sie die folgende
String.substring
Methode verwenden:Hinweis: Beachten Sie, dass der Benutzer den Hash nach Belieben ändern kann , indem Sie etwas in Ihren Selektor injizieren. Sie sollten den Hash überprüfen, bevor Sie ihn verwenden.
quelle
var hash = location.hash.slice(1); $('ul.item'+hash).show().append($('#content'));
Dadurch wird ein Skript-Tag ausgeführt, das in den Hash eingefügt wird. Es ist eine gute Angewohnheit,$('body').find('ul'+hash+':first')
statt zu verwenden$('ul'+hash+':first')
.var hash = location.hash.replace('#', '');
$(userInput)
ist im Allgemeinen unsicher, da$
es überladen ist und entweder nach vorhandenen Knoten suchen oder neue erstellen kann, je nachdem, ob die Zeichenfolge<>
Zeichen enthält .$(document).find(userInput)
sucht immer nach vorhandenen Knoten, damit diese weniger unsicher sind. Die beste Vorgehensweise besteht jedoch darin, Benutzereingaben immer zu bereinigen. Wenn Sie beispielsweise alphanumerische IDs verwenden, stellen Sie sicher, dass diese alphanumerisch sind.location.hash ist für IE nicht sicher. Wenn IE (einschließlich IE9) IE enthält, enthält Ihre Seite nach der manuellen Aktualisierung des iframe-Inhalts den Wert location.hash (Wert für das Laden der ersten Seite). Der manuell abgerufene Wert unterscheidet sich von location.hash. Rufen Sie ihn daher immer über document.URL ab
quelle
Für diejenigen, die nach einer reinen Javascript-Lösung suchen
Hoffe das spart dir etwas Zeit.
quelle
Seit jQuery 1.9 stimmt der
:target
Selektor mit dem URL-Hash überein. So könnten Sie tun:Welches würde das Element mit der ID auswählen, die mit dem Hash übereinstimmt, und es anzeigen.
quelle
:target
als String bekommen? Wenn ja, glaube ich nicht.Ich würde empfehlen, zuerst besser zu cek, wenn die aktuelle Seite einen Hash hat. Sonst wird es sein
undefined
.quelle
Ich verwende dies, um die Sicherheitsaspekte zu beheben, die in der Antwort von @ CMS angegeben sind.
quelle