javascript - 使用 vanilla JS 更改滚动上的徽标
问题描述
我一直坚持使用我的代码来更改使用 Vanilla JS(无 JQuery)滚动时的徽标。
我从我的 devtool 得到的是这个错误:-
未捕获的 DOMException:无法在 'DOMTokenList' 上执行 'add':提供的令牌('[object HTMLImageElement]')包含 HTML 空格字符,这些字符在 tokens.at {localhost} 中无效
谁能发现我的代码哪里出错了?
const bigLogo = `<img src="images/redsbaby.svg" alt="Logo" />`;
const smallLogo = `<img src="images/r.svg" alt="Logo" />`;
window.addEventListener("scroll", () => {
const currentLocation = window.pageYOffset;
if(currentLocation <= 0){
document.getElementsByClassName('.div-logo').innerHTML = smallLogo;
} else {
document.getElementsByClassName('.div-logo').innerHTML = bigLogo;
}
})
<html>
<link href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" rel="stylesheet">
<div class="div-logo flex-col justify-center items-center order-1 mx-16 mt-2 md:-mt-1 sm:-mt-0.5 xs:mx-10 xs:-mt-0.5">
<img src="images/redsbaby.svg" alt="Logo" class="big-logo md:hidden sm:hidden xs:hidden" />
<img src="images/r.svg" alt="Logo" class=" small-logo hidden md:block sm:block xs:block" />
</div>
</html>
解决方案
鉴于当前的代码,有两个问题。
传递给getElementsByClassName
方法的选择器字符串参数不需要.
类名的前缀(我们这里只按类选择)。
另一件事是,此方法不会返回单个元素。
The getElementsByClassName method of Document interface returns an array-like object of all child elements which have all of the given class name(s).
如果页面上有多个.div-logo
元素,您将需要遍历它们以innerHtml
单独设置。
const logoDivs = document.getElementsByClassName('div-logo');
for (let i = 0; i < logoDivs.length; i++;) {
logoDivs[i].innerHTML = smallLogo; // or bigLogo
}
如果只有一个.div-logo
元素,只需使用document.querySelector
.
document.querySelector('.div-logo').innerHTML = smallLogo; // or bigLogo
推荐阅读
- php - JSON 使用 File_get_contents 获取 PHP 数组
- docusignapi - 尝试使用 Microsoft Flow 创建信封时出错 - 可能是超时
- python - Python:如何确保函数在第一次被调用时被加载?
- javascript - Javascript代码不执行?
- scala - flatMap 与 scala 中的地图
- python - python字典中的共同值
- amazon-web-services - “基本健康检查不得指定指标区域。”
- winapi - CWnd::KillTimer 失败,当我在主线程中启动两个具有相同时间间隔的计时器时
- sql - 用googlebigquery(标准sql)中变量2 sql的非缺失值替换变量1的缺失值
- mysql - 在 SQL 中删除 SQL JOIN 和 UNION 运算符中的 NULL 值