JQuery Smooth Scroll To DIV - использование значения ID из ссылки
Итак, у меня есть некоторые проблемы с моим JQuery, который предположительно прокручивает до определенных div.
HTML
<div id="searchbycharacter">
<a class="searchbychar" href="#" id="#0-9" onclick="return false">0-9 |</a>
<a class="searchbychar" href="#" id="#A" onclick="return false"> A |</a>
<a class="searchbychar" href="#" id="#B" onclick="return false"> B |</a>
<a class="searchbychar" href="#" id="#C" onclick="return false"> C |</a>
... Untill Z
</div>
<div id="0-9">
<p>some content</p>
</div>
<div id="A">
<p>some content</p>
</div>
<div id="B">
<p>some content</p>
</div>
<div id="C">
<p>some content</p>
</div>
... Untill Z
JQuery
Что я хочу, чтобы код выполнял: В событии щелчка .searchbychar A TAG > Возьмите значение атрибута ID и прокрутите до этого...
$( '.searchbychar' ).click(function() {
$('html, body').animate({
scrollTop: $('.searchbychar').attr('id').offset().top
}, 2000);
});
Ответы
Ответ 1
Идентификаторы должны быть уникальными и никогда не использовать идентификатор, начинающийся с числа, вместо этого использовать атрибуты данных, чтобы установить цель так:
<div id="searchbycharacter">
<a class="searchbychar" href="#" data-target="numeric">0-9 |</a>
<a class="searchbychar" href="#" data-target="A"> A |</a>
<a class="searchbychar" href="#" data-target="B"> B |</a>
<a class="searchbychar" href="#" data-target="C"> C |</a>
... Untill Z
</div>
Что касается jquery:
$(document).on('click','.searchbychar', function(event) {
event.preventDefault();
var target = "#" + this.getAttribute('data-target');
$('html, body').animate({
scrollTop: $(target).offset().top
}, 2000);
});
Ответ 2
Вы можете сделать это:
$('.searchbychar').click(function () {
var divID = '#' + this.id;
$('html, body').animate({
scrollTop: $(divID).offset().top
}, 2000);
});
F.Y.I.
- Вам необходимо префикс имени класса с помощью
.
(точка), как в вашей первой строке кода.
-
$( 'searchbychar' ).click(function() {
- Кроме того, ваш код
$('.searchbychar').attr('id')
вернет идентификатор строки, а не объект jQuery. Следовательно, вы не можете применить к нему метод .offset()
.
Ответ 3
Вот мое решение:
<!-- jquery smooth scroll to id -->
<script>
$(function() {
$('a[href*=\\#]:not([href=\\#])').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
if (target.length) {
$('html,body').animate({
scrollTop: target.offset().top
}, 500);
return false;
}
}
});
});
</script>
С помощью всего этого фрагмента вы можете использовать неограниченное количество хеш-ссылок и соответствующих идентификаторов без необходимости выполнять новый script для каждого.
Я уже объяснил, как он работает в другом потоке здесь: fooobar.com/info/46063/... (или здесь прямая ссылка на мой пост в блоге)
Для уточнений дайте мне знать. Надеюсь, это поможет!