我遇到一个未捕获的类型错误的问题,但是脚本仍然有效。我想解决此问题,但似乎看不到问题。任何帮助是极大的赞赏!脚本在下面。
StickyNav: function() {
let mainNavLinks = document.querySelectorAll(".js-pdp-link");
let mainSections = document.querySelectorAll("section");
let lastId;
let cur = [];
window.addEventListener("scroll", event => {
let fromTop = window.scrollY + 70;
mainNavLinks.forEach(link => {
let section = document.querySelector(link.hash);
if (section.offsetTop <= fromTop && section.offsetTop + section.offsetHeight > fromTop) {
link.classList.add("js-active");
} else {
link.classList.remove("js-active");
}
});
});
}
答案 0 :(得分:1)
当您这样做:
let mainNavLinks = document.querySelectorAll(".js-pdp-link");
mainNavLinks.forEach(link => {
let section = document.querySelector(link.hash);
您正在使用.js-pdp-link
类来迭代所有元素,如果它们实现了HTMLHyperlinkElementUtils接口( ie 是a
或{{1 }}元素),提取其hash属性。然后,您将area
用作选择器。
它可以通过三种不同的方式失败:
如果目标元素未实现hash
,则HTMLHyperlinkElementUtils
返回link.hash
。
如果undefined
属性不包含哈希,则href
返回一个空字符串。
如果没有link.hash
等于id
的元素,则hash
为querySelector(link.hash)
。
当您尝试null
时,情况2导致SyntaxError: '' is not a valid selector
。
另外两个允许您运行document.querySelector(link.hash)
,但导致querySelector
为section
。然后,如果您尝试访问其null
属性,则会得到.offsetTop
。