仅存在于一个 HTML 文件中的元素,阻止我所有其他 HTML 文件运行 JS

Posted

技术标签:

【中文标题】仅存在于一个 HTML 文件中的元素,阻止我所有其他 HTML 文件运行 JS【英文标题】:An element that only exists in one HTML file, stops all my other HTML files from running JS 【发布时间】:2021-09-10 08:10:46 【问题描述】:

我有 5 个 html 都链接到 1 个仅 JS 和 1 个仅 CSS。所有内容都在同一个文件夹中。

在其中一个 HTML 文件中,有一个 div 与网格颜色类。我写了一个for loop 来访问这个网格颜色div,它工作正常。但是,我的所有其他 HTML 文件都会在控制台中显示 Uncaught TypeError: gridColors is null 的错误。我猜javascript试图在打开的文件中找到网格颜色div,但它只存在于一个HTML文件中。我如何确保 javascript 仅在一个文件中查找此类?或者我该如何解决这个错误?

元素工作的 HTML

<div class="grid-colors"></div>

Javascript

const gridColors = document.querySelector(".grid-colors");
for (let i = 0; i < 36; i++) 
    const item = document.createElement("div");
    item.classList.add("color-grid-item");
    gridColors.appendChild(item);

【问题讨论】:

将代码包装在检查元素是否不为空的条件中,这样它只在不为空时运行。 【参考方案1】:

有条件地检查元素是否不为空应该可以解决您的问题。

const gridColors = document.querySelector(".grid-colors");
if (gridColors !== null) 
  for (let i = 0; i < 36; i++) 
    const item = document.createElement("div");
    item.classList.add("color-grid-item");
    gridColors.appendChild(item);
  

【讨论】:

【参考方案2】:

有两种方法:

    您的其他 HTML 文件没有 gridColors 元素。如果您在没有函数的情况下在全局范围内定义了代码,那么唯一的方法是检查gridColors 变量是否为null,如果是,则跳出for 循环。
const gridColors = document.querySelector(".grid-colors");
for (let i = 0; i < 36; i++) 
    if(!gridColors) break; //escapes the error
    const item = document.createElement("div");
    item.classList.add("color-grid-item");
    gridColors.appendChild(item);

    如果代码位于 JS 文件中的 function 中,并且您只需要在特定 HTML 页面中调用该函数,请对该 HTML 页面使用 onload 函数,如下所示:
<body onload="theFunction()">
...
...
</body>

【讨论】:

【参考方案3】:

要定义局部范围变量,您需要使用 var,而不是 const。 https://www.freecodecamp.org/news/var-let-and-const-whats-the-difference/

var gridColors = document.querySelector(".grid-colors");
for (let i = 0; i < 36; i++) 
    var item = document.createElement("div");
    item.classList.add("color-grid-item");
    gridColors.appendChild(item);

【讨论】:

但是 JS 文件中的变量范围会有什么帮助呢?他将继续在所有其他 4 个 html 文件中收到错误,因为缺少所需的元素,只有空检查可以帮助这里已经回答。 @Xth 是的,范围没有帮助我猜其他元素没有出现这个问题,因为我通过函数管理它们但我现在想知道......我是否总是要问变量是否是否为 null 以便代码正常运行? @AlanRothmanMariñoCruel 我认为是的,因为在您的代码中,您将类添加到 div 元素,如果您的元素不存在,则无法将其添加到任何内容中

以上是关于仅存在于一个 HTML 文件中的元素,阻止我所有其他 HTML 文件运行 JS的主要内容,如果未能解决你的问题,请参考以下文章

如何使按钮(输入)仅适用于 html 中的一个文本框?

Jquery 动画仅适用于一个元素

在pycharm中仅关闭一个文件中的红色下划线

如何让此查询打印仅存在于一个表中的记录?

HTML/CSS 解决方法 menu-toggle 仅适用于第一个元素

有没有办法阻止内容可编辑的插入符号出现在 IE 10 中的元素上?