Получение URL-адреса хеша и использование его в jQuery
Я хочу получить значение после хэша в URL-адресе текущей страницы, а затем смогу применить его в новой функции... например.
URL может быть
www.example.com/index.html#foo
И я хотел бы использовать это в сочетании со следующим фрагментом кода
$('ul#foo:first').show();
Я вроде бы предполагаю/надеюсь, что есть способ захватить это и превратить его в переменную, которую я могу использовать во второй части кода.
Любая помощь будет оценена по весу!
Приветствия
Ответы
Ответ 1
Примечание редактора: нижеприведенный подход имеет серьезные последствия для безопасности и, в зависимости от версии jQuery, которую вы используете, может подвергать ваших пользователей атакам XSS. Более подробно см. Обсуждение возможной атаки в комментариях к этому ответу или этому объяснению в разделе " Безопасность стека Exchange".
Свойство location.hash
можно использовать для захвата хеша текущей страницы:
var hash = window.location.hash;
$('ul'+hash+':first').show();
Обратите внимание, что это свойство уже содержит символ #
в начале.
На самом деле вам не нужен :first
псевдоселектор, поскольку вы используете селектор ID, предполагается, что идентификаторы уникальны в DOM.
Если вы хотите получить хэш из строки URL, вы можете использовать метод String.substring
:
var url = "http://example.com/file.htm#foo";
var hash = url.substring(url.indexOf('#')); // '#foo'
Совет. Имейте в виду, что пользователь может изменить хэш по своему усмотрению, впрыскивая что-либо вашему селектору, перед его использованием вы должны проверить хэш.
Ответ 2
location.hash не безопасно для IE, в случае IE (включая IE9), если ваша страница содержит iframe, то после ручного обновления внутри содержимого iframe получить значение location.hash старое (значение для загрузки первой страницы). в то время как значение, полученное вручную, отличается от location.hash, поэтому всегда извлекайте его через document.URL
var hash = document.URL.substr(document.URL.indexOf('#')+1)
Ответ 3
Для тех, кто ищет чистое решение javascript
document.getElementById(location.hash.substring(1)).style.display = 'block'
Надеюсь, это сэкономит вам некоторое время.
Ответ 4
Сначала я предлагаю лучше cek, если на текущей странице есть хэш. В противном случае это будет undefined
.
$(window).on('load', function(){
if( location.hash && location.hash.length ) {
var hash = decodeURIComponent(location.hash.substr(1));
$('ul'+hash+':first').show();;
}
});