id в качестве якоря

12
[Удален]
1672

раньше не обращал внимание, а сейчас при написании одного скрипта, обнаружил интересное свойство некоторых браузеров:

если в качестве якоря передаётся id или class существующего элемента на странице, то браузер прокручивает страницу до этого элемента, к сожалению почему-то не желает прокручивать если данный атрибут (id, class) создаётся в момент формирования страницы js

кстати при создании метки средствами js (<a name="метка"></a>) в момент открытия страницы - браузер то же не прокручивает страницу

может кто-нибудь сходу подскажет как прокрутить страницу до метки сформированной js?

mfl
На сайте с 16.10.2006
Offline
134
mfl
#1

Я так понимаю, элемент создается после того, как DOM был сформирован.

В таком случае можно выполнять window.location.hash=window.location.hash; после формирования элемента.

[Удален]
#2

mfl, замечательно только событие вызывается 6 раз :)

у меня dom формируется на лету,

соответственно вопрос когда запускать window.location.hash=window.location.hash

не очень понятно :(

к элементу я могу обратиться только через

$("h2[id]").livequery(function(){
window.location.hash=window.location.hash;
}, function(){});

использовать костыль вида

$("h2[id=h0]").livequery(function(){
window.location.hash=window.location.hash;
}, function(){});

не очень хочется, а в первом случае функция будет вызвана столько раз сколько тегов h2 с явно указанным id

mfl
На сайте с 16.10.2006
Offline
134
mfl
#3

уточнить хотел, dom формируется по мере загрузки страницы, без срабатывания событий, зависящих от пользователя?

Если это так, то можно просто установить обработчик полной загрузки страницы.

$(window).load(function(){

window.location.hash=window.location.hash;

});

В противном случае, придется вызывать при каждом срабатывании события.

Т.е. использовать первый вариант, описанный Вами.

Но, думаю, это не проблема. При изменении window.location.hash перезагрузки станицы не происходит. Если якорь не встречается по мере формирования dom, то прокрутки не происходит.

Ayavryk
На сайте с 11.10.2003
Offline
209
#4
burunduk:
mfl, замечательно только событие вызывается 6 раз :)
соответственно вопрос когда запускать window.location.hash=window.location.hash

Задержка на 100мс не спасет?

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/
dma84
На сайте с 21.04.2009
Offline
168
#5
burunduk:
если в качестве якоря передаётся id или class существующего элемента на странице, то браузер прокручивает страницу до этого элемента

На счёт class первый раз слышу, но по id все браузеры давно прокручивают

burunduk:
может кто-нибудь сходу подскажет как прокрутить страницу до метки сформированной js?

Вы формируете страницу на стороне клиента с помощью JS, а прокрутку пытаетесь реализовать нативными средствами?😮

Я не вижу ничего плохого и сложного в прокрутке страницы с помощью JS, даже у всеми любимого Ойгукна есть эта фича

IL
На сайте с 20.04.2007
Offline
435
#6
burunduk:
а в первом случае функция будет вызвана столько раз сколько тегов h2 с явно указанным id

Можно добавить удаление обработчика (аналог unbind, только для livequery) в конец функции, чтобы она не вызывалась повторно.

Я правильно понимаю, что версия JQuery старая? Т.к. в последних версиях, для навешивания обработчиков на ещё не созданные элементы можно обходиться "встроенными" возможностями библиотеки.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
[Удален]
#7
ivan-lev:
Т.к. в последних версиях, для навешивания обработчиков на ещё не созданные элементы можно обходиться "встроенными" возможностями библиотеки.

проблема в том что .on() необходимо передать событие, а не функцию,

т.е. конструкция вида

$("селектор").on(function(){}, function(){});

не сработает и к элементу на странице я обратиться не смогу, т.к. их нет в dom

почти в самом начале кода стоит строка

$("body").html("");
mfl:
Если якорь не встречается по мере формирования dom, то прокрутки не происходит.

якорь может появляться в dom в любой момент :)

Ayavryk:
Задержка на 100мс не спасет?

не вариант - это тоже костыль :)

dma84:
Вы формируете страницу на стороне клиента с помощью JS, а прокрутку пытаетесь реализовать нативными средствами?

да :)

dma84
На сайте с 21.04.2009
Offline
168
#8
burunduk:
да :)

Но зачем? Вообще, в данном случае, вариант нативной прокрутки - костыль, а вы на него ещё больше костылей пытаетесь навесить.

Банальный

object.scrollIntoView(true)
уже не катит?

http://learn.javascript.ru/metrics-window#изменение-прокрутки-scrollto-scrollby-scrollintoview

[Удален]
#9
dma84:
object.scrollIntoView(true)

проблема в том что object не известен заранее и определяется на другой странице в момент клика на неизвестном заранее элементе, после клика происходит переход на страницу на которой ещё нет этого объекта его сначала необходимо сформировать :)

dma84
На сайте с 21.04.2009
Offline
168
#10
burunduk:
проблема в том что object не известен заранее и определяется на другой странице в момент клика на неизвестном заранее элементе, после клика происходит переход на страницу на которой ещё нет этого объекта его сначала необходимо сформировать :)

Но ведь когда этот объект формируется и добавляется в DOM у вас к нему есть доступ, правильно? Я так думаю, что он у вас всё же не рандомно формируется

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий