gpt4 book ai didi

javascript - 使用 querySelectorAll 的 Intersection Observer 会抛出 TypeError

转载 作者:行者123 更新时间:2023-12-02 21:13:02 26 4
gpt4 key购买 nike

我遇到了交叉口观察器问题。使用 document.querySelectorAll('.entry') 会抛出 TypeError:“未捕获的 TypeError:无法在 'IntersectionObserver' 上执行 'observe':参数 1 不是 'Element' 类型。”

document.querySelectorAll('.entry'); 更改为 document.querySelector('.entry'); 解决了问题并且有效。

我做错了什么?

基本的 HTML 结构:

<html>
<body>
<div id="content-container">
<div class="content">
<div class="entry">Some content here on each entry</div>
<div class="entry"></div>
<div class="entry"></div>
<div class="entry"></div>
<div class="entry"></div>
<div class="entry"></div>
</div>
</div>
</body
</html>

JavaScript:

const blog = document.querySelectorAll('.entry');
const options = {
root: null,
rootMargin: '0px',
};

const observer = new IntersectionObserver(function(entries, observer) {
entries.forEach((entry) => {
if (!entry.isIntersecting) {
return;
}

else {
console.log(entry);
}
});



}, options);


observer.observe(blog);

最佳答案

发生此问题的原因是 IntersectionObserver.observe()只能观察一个 targetElement 但使用 document.querySelectorAll()您正在传递一个 NodeList,它表示与指定的选择器组匹配的文档元素列表。因此,您遇到了问题,但是 document.querySelector()只给你第一个匹配的元素,因此使用它时没有问题。

您可以通过循环遍历列表中的所有元素并单独观察每个元素来解决此问题,如下所示:

const blogs = document.querySelectorAll('.entry');
blogs.forEach(blog => observer.observe(blog));

关于javascript - 使用 querySelectorAll 的 Intersection Observer 会抛出 TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61042672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com