Это, вероятно, одна из тех задач, о которой все думают, что знают решение, но многие решают её в ...
Это, вероятно, одна из тех задач, о которой все думают, что знают решение, но многие решают её в итоге некорректно. Наткнувшись на ещё один сверхслабый кусок кода, написанный для этой цели, я задумала разъясняющую блогозапись.
Суть проблемы
Вы хотите убрать символ
решётки (#) из значения
location.hash. Например, когда hash равен
"#foo", Вы хотите получить строку, содержащую
"foo". Это же просто, правда?
Сложные случаи
Вот что большинство разработчиков, кажется, упускает из виду: в современных, мощно наджаваскриптованных, приложениях переменная
hash может содержать любые юникодовые символы. Она не обязательно должна соответствовать значению реального
атрибута id с той же страницы. А когда она и соответствует,
атрибуты id теперь могут содержать почти любые юникодовые символы. Да ещё часто забывают, что на странице может и не быть никакого хэша. Даже если URL оканчивается
символом «#», строка
location.hash равняется на самом деле
"" (пустой строке),
а не "#".
Наивные подходы
Вот наиболее недавний — я нашла его в книге, на которую составляла техническую рецензию:
var hash = location.hash.match(/#(\w+)/)[1];
У него сразу несколько проблем:
Читать дальше →
Это, вероятно, одна из тех задач, о которой все думают, что знают ...
Хабы: Веб-разработка
Это, вероятно, одна из тех задач, о которой все думают, что знают решение, но многие решают её в итоге некорректно. Наткнувшись на ещё один сверхслабый кусок кода, написанный для этой цели, я задумала разъясняющую блогозапись.
Суть проблемы
Вы хотите убрать символ
решётки (#) из значения
location.hash. Например, когда hash равен
"#foo", Вы хотите получить строку, содержащую
"foo". Это же просто, правда?
Сложные случаи
Вот что большинство разработчиков, кажется, упускает из виду: в современных, мощно наджаваскриптованных, приложениях переменная
hash может содержать любые юникодовые символы. Она не обязательно должна соответствовать значению реального
атрибута id с той же страницы. А когда она и соответствует,
атрибуты id теперь могут содержать почти любые юникодовые символы. Да ещё часто забывают, что на странице может и не быть никакого хэша. Даже если URL оканчивается
символом «#», строка
location.hash равняется на самом деле
"" (пустой строке),
а не "#".
Наивные подходы
Вот наиболее недавний — я нашла его в книге, на которую составляла техническую рецензию:
var hash = location.hash.match(/#(\w+)/)[1];
У него сразу несколько проблем:
Читать дальше →