Я хотел бы получить значение после хэша в URL текущей страницы, а затем иметь возможность применить это в новой функции ... например.
URL может быть
www.example.com/index.html#foo
И я хотел бы использовать это в сочетании со следующим фрагментом кода
$('ul#foo:first').show();
Я предпочитаю / надеюсь, что есть какой-то способ схватить это и превратить в переменную, которую я затем смогу использовать во втором фрагменте кода.
jquery
url
hash
fragment-identifier
Робби Уайт
источник
источник
'ul#foo:first'
не имеет смысла, поскольку идентификаторы должны быть уникальными, поэтому добавление:first
в селектор является избыточным, если только вы не дублируете идентификаторы, которые недопустимы. Обратите внимание, что даже десять лет назад повторные идентификаторы были недействительными.Ответы:
Вы можете использовать
location.hash
свойство, чтобы получить хеш текущей страницы:Обратите внимание, что это свойство уже содержит
#
символ в начале.На самом деле вам не нужен
:first
псевдо-селектор, так как вы используете селектор идентификаторов , предполагается, что идентификаторы уникальны в DOM.Если вы хотите получить хеш из строки URL, вы можете использовать
String.substring
метод:Совет: имейте в виду, что пользователь может изменять хэш по своему усмотрению, вводя что-либо в ваш селектор, вы должны проверить хэш перед его использованием.
источник
var hash = location.hash.slice(1); $('ul.item'+hash).show().append($('#content'));
это выполнит тег скрипта, помещенный в хеш. Это хорошая привычка использовать$('body').find('ul'+hash+':first')
вместо$('ul'+hash+':first')
.var hash = location.hash.replace('#', '');
$(userInput)
обычно небезопасно, поскольку$
перегружен и может либо искать существующие узлы, либо создавать новые в зависимости от того, содержит ли строка<>
символы.$(document).find(userInput)
всегда будет искать существующие узлы, так что это менее опасно. Тем не менее, рекомендуется всегда дезинфицировать пользовательский ввод, например, если вы используете буквенно-цифровые идентификаторы, убедитесь, что они буквенно-цифровые.location.hash не является безопасным для IE , в случае IE (включая IE9), если ваша страница содержит iframe, то после обновления вручную внутри содержимого iframe получите значение location.hash (значение для загрузки первой страницы). значение, полученное вручную, отличается от значения location.hash, поэтому всегда извлекайте его через document.URL
источник
Для тех, кто ищет чистое решение javascript
Надеюсь, это сэкономит вам время.
источник
Начиная с jQuery 1.9,
:target
селектор будет соответствовать хешу URL. Так что вы могли бы сделать:Который выберет элемент с идентификатором, соответствующим хешу, и покажет его.
источник
:target
в виде строки? Если так, то я не верю в это.Я бы посоветовал лучше сначала использовать cek, если на текущей странице есть хеш. Иначе это будет
undefined
.источник
Я использую это для устранения последствий для безопасности, отмеченных в ответе @ CMS.
источник