我对scrollIntoView的工作方式有疑问,那么为什么要scrollIntoView像这样工作:
liItems.forEach(val => {
val.addEventListener('click', e => {
e.preventDefault();
document.querySelector(val.getAttribute('href')).scrollIntoView({
...
})
})
})
但不是这样工作的:
liItems.forEach(val => {
val.addEventListener('click', e => {
e.preventDefault();
val.getAttribute('href').scrollIntoView({
...
})
})
})
scrollIntoView
是Element
s上的一种方法。
querySelector
返回一个Element
。 这就是第一个示例起作用的原因:
const elem = document.querySelector(val.getAttribute('href')); // this is an Element
elem.scrollIntoView(); // OK!
然而,getAttribute
是Element
上返回string
的方法:
const someHref = val.getAttribute('href'); // this is a string
someHref.scrollIntoView(); // error :( strings don't have scrollIntoView