So i'm having some issues with my JQuery which is suppose to scroll to particular divs.
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
What i want the code to do is: On click event of an .searchbychar A TAG > Take the ID attributes value and scroll to that...
$( '.searchbychar' ).click(function() { $('html, body').animate({ scrollTop: $('.searchbychar').attr('id').offset().top }, 2000); });
click(function(event) { event. preventDefault(); $. scrollTo($('#myDiv'), 1000); });
The scrollTo method: The scrollTo() is used to scroll to the specified element in the browser.
preventDefault(); document. querySelector(this. getAttribute('href')). scrollIntoView({ behavior: 'smooth' }); }); });
Modern Browsers detect the hash in the url and then automatically open that part. So, if you want to scroll smoothly to that part instead, you first need to reset the scroll position to 0 and then add smooth scrolling. // direct browser to top right away if (window. location.
Ids are meant to be unique, and never use an id that starts with a number, use data-attributes instead to set the target like so :
<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>
As for the jquery :
$(document).on('click','.searchbychar', function(event) { event.preventDefault(); var target = "#" + this.getAttribute('data-target'); $('html, body').animate({ scrollTop: $(target).offset().top }, 2000); });
You can do this:
$('.searchbychar').click(function () { var divID = '#' + this.id; $('html, body').animate({ scrollTop: $(divID).offset().top }, 2000); });
F.Y.I.
.
(dot) like in your first line of code.$( 'searchbychar' ).click(function() {
$('.searchbychar').attr('id')
will return a string ID not a jQuery object. Hence, you can not apply .offset()
method to it.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With