如何迭代 getElementByClassName 返回

2024-01-02

我读过几篇关于 GetElementsByClassName 的文章,但我很难理解如何迭代它返回的内容。

我正在编写纯 JavaScript 代码,以便当用户滚动时我的导航栏将采用“固定”位置。但是,当发生此更改时,导航栏列表项需要更改格式,以便它们的角在底部而不是顶部弯曲。我需要迭代 getElementsByClassName 的返回来单独更改每个组成元素,但我的 for 循环不起作用。我是否需要一个 For ... In 循环?

我从其他帖子中学到的:

  • getElementsByClassName 确实NOT返回一个数组。它返回一个 HTML 集合。

  • 使用 jQuery 可能会更容易(我在构建此网站时正在尝试学习 JavaScript,因此此时我不使用 jQuery 很重要)。

如果删除我试图用来迭代 HTMLcollection 的 for 循环,下面的 JSFiddle 中的代码将会运行。

TLDR:为了在下面的小提琴中迭代 HTMLcollection,我的 for 循环应该是什么样子?

JSFiddle:

https://jsfiddle.net/mcgettrm/e8dabdkn/ https://jsfiddle.net/mcgettrm/e8dabdkn/

Code:

window.addEventListener('scroll', function (evt) {
  var distance_from_top = document.body.scrollTop;
  if (distance_from_top <= 80) {
    document.getElementById("navBar").style.position = "static";
    document.getElementById("navBarList").style.borderBottom = "solid black 4px";
    document.getElementById("navBar").style.borderTop = "initial";
  }


    else if(distance_from_top > 80) {
    document.getElementById("navBar").style.position = "fixed";
    document.getElementById("navBar").style.top = "0px";
    document.getElementById("navBar").style.borderTop = "solid black 4px";
    document.getElementById("navBarList").style.borderBottom = "initial";
    var myCollection = document.getElementsByClassName("navBarLink");
    var collectionLength = myCollection.length;
    document.getElementById("consoleInfo").innerHTML = collectionLength;
    document.getElementById("consoleInfo").innerHTML = myCollection[0];
    for(var i = 0, i <= collectionLength, i++){
        myCollection.item(i).style.borderTopLeftRadius = "initial";
        myCollection.item(i).style.borderTopRightRadius = "initial";
        myCollection.item(i).style.borderBottomLeftRadius = "1em";
        myCollection.item(i).style.borderBottomRightRadius = "1em"; 
        }
    } 

});

关于你实际问的问题......

...这是如何循环遍历集合的:

您有很多选择,其中大部分都在这个答案在“对于类数组对象”下 https://stackoverflow.com/a/9329476/157247.

简而言之,一些选择,假设我们从以下开始:

var myCollection = document.getElementsByClassName("navBarLink");

forEach:

// forEach:
Array.prototype.forEach.call(myCollection, function(element) {
    // Use element here
});

for loop:

var i;
for (i = 0; i < myCollection.length; ++i) {
    // Use myCollection[i] here
}

请注意,这是0通过< myCollection.length, not <= myCollection.length.

或者使用获取一个真正的数组Array.from or Array.prototype.slice。链接答案中的详细信息。

关于你实际上在做什么......

I would strongly建议您不要做大量的内联样式。相反,您的 JavaScript 可以如此简单:

window.addEventListener('scroll', function (evt) {
  var distance_from_top = document.body.scrollTop;
  document.body.classList.toggle("near-top",     distance_from_top <= 80);
  document.body.classList.toggle("not-near-top", distance_from_top > 80);
});

(如果您必须支持非常旧的浏览器,您将需要一个classList垫片或只是操纵body.className直接地。)

然后,在 CSS 中完成其余部分,例如#navBar stuff:

body.not-near-top #navBar {
    /* styles for when we're not near the top */
}
body.near-top #navBar {
    /* style for when we are near the top */
}

从技术上讲,如果您愿意,您可以取消其中一个类,只需基于样式body #navBar { ... }然后在您保留的课程中覆盖。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何迭代 getElementByClassName 返回 的相关文章

随机推荐

  • python中一个3D图形中的多个2D轮廓图

    python 中是否有任何方法可以在 python 的一个 3D 图中绘制多个 2D 等高线图 我目前正在使用 matplotlib 进行轮廓绘制 但没有找到我正在搜索的任何选项 我添加的示例图像 但我想在Z轴上做 你可以试试这个 from
  • 解释差分进化方法

    有人可以解释一下差分进化方法吗 维基百科定义 http en wikipedia org wiki Differential evolution Algorithm非常具有技术性 一个简单的解释和一个简单的例子将不胜感激 这是一个简化的描述
  • 在 Angular 2 中对 observable 进行单元测试

    在 Angular 2 中对返回 Observable 结果的服务进行单元测试的正确方法是什么 假设 CarService 服务类中有一个 getCars 方法 export class CarService getCars Observa
  • 如何设置 uitoolbar 的背景类似于我的导航栏

    大家好 我为我的导航栏设置了一个自定义背景 我认为这是我从 IB 选择的色调 现在我想以编程方式更改我的 uitoolbar 的 以编程方式添加 背景 类似于我的导航栏 有义务在这方面提供任何帮助 对不起大家 我的错 它实际上是导航控制器的
  • Fortran 模块中类型之间的循环依赖

    我不知道 Fortran 模块中的循环依赖到底是如何解决的 以下模块使用 ifort 2016 和 gfortran 4 9 进行编译 module types implicit none type type1 type type2 poi
  • DigitalOcean 上的 Kubernetes 外部负载均衡器服务

    我正在 DigitalOcean 上使用 CoreOs 和 Kubernetes 构建一个容器集群 我发现为了向世界公开 Pod 您必须创建一个类型为 LoadBalancer 的服务 我认为这是最佳解决方案 这样您就不需要在 kubern
  • 查询:查找不属于值列表的行

    让我们考虑一下我有一个表 Tab 其中有一列 Col 表 Tab 具有以下数据 Col 1 2 3 4 5 如果我有一组值 2 3 6 7 我可以通过起诉查询来查询表和列表中存在的值 Select Col from Tab where co
  • 无法读取包名称“:generateDebugBuildConfig”

    我遇到的问题是我的构建无法读取我的包名称 我已经检查了所有内容 看起来不错 但我不知道为什么找不到包裹 它指向的目录AndroidManifest xml是错的 Users tonystark Documents GitHub roboap
  • 我可以将环境变量从 Gitlab .gitlab-ci.yml 传递到 React 应用程序吗?

    我正在尝试使用 gitlab CI 管道动态设置环境变量 我想要实现的是根据我要部署到的阶段 阶段 产品 注入正确的 API 密钥和 URL 在我的 React 应用程序中 我使用访问变量process env REACT APP APPS
  • Spark 中的纱线客户端模式是什么?

    Apache Spark最近更新了版本至0 8 1 其中yarn client模式可用 我的问题是 yarn client 模式的真正含义是什么 在文档中它说 使用yarn client模式 应用程序将在本地启动 就像在本地 Mesos 独
  • 我无法接收有关电池状态变化的广播?

    我遇到了与这篇文章完全相同的问题 电池广播接收器不工作 https stackoverflow com questions 8582539 battery broadcast receiver doesnt work 但似乎没有人回答这个问
  • 当我按下 Android 设备的 home 按钮时,出现异常为“保存状态失败:活动片段已清除索引:-1”

    当我按下 Android 的主页按钮并开始新活动时 我遇到了一些奇怪的问题 我的堆栈跟踪如下 05 13 18 06 21 182 E FragmentManager 5674 Failure saving state active Fra
  • 有没有办法在 Python 中往返转储 YAML 时保持顺序?

    我正在尝试从 YAML 文件加载一些数据并将其放回 services dc01 sw 06 50001 servers ip 10 255 206 12 port 50001 weight 100 ip 10 255 206 13 port
  • 如何在共享托管环境中实现ASP.Net MVC网站的后台处理?

    我正在使用 ASP Net MVC 开发我的第一个 Web 应用程序 我现在的情况是希望有一个后台服务来处理应用程序外部的状态通知 这与 stackoverflow 上的声誉 徽章系统不同 处理这样的事情最好的方法是什么 在像我正在使用的
  • Anylogic 中的时间分布和处理所花费的时间

    我正在研究生产模型 其中原材料的输入按小时计算 我运行该模型 8 小时 1 个班次 所以基本上有 16 小时资源闲置 当我没有使用计划部分并运行模型 8 7 小时 56 小时 时 每个作业的时间测量都很好 但现在当我计划输出时 它也包括空闲
  • 用户没有访问该对象的权限。 Firebase 存储 Android

    我是 firebase 存储的新手 为了学习它 我制作了一个简单的应用程序 其中有一个按钮和一个ImageView 当我点击按钮时 会出现一张图片 from drawable 显示在 ImageView 上 我还编写了在Firebase上上
  • 部署 Gen2 Cloud Function 时出现权限被拒绝错误

    我们根据给定的需求开发了云功能 并使用第一代进行了初步验证 一切顺利 但需要进行的修改很少 因此需要额外的处理时间 因此我们必须切换到 gen2 以下是 gcloud 函数部署命令 gcloud functions deploy gen2
  • ServiceStack Swagger UI 和 API 版本号

    有没有办法将版本号输入到 swagger UI 中 那么我们可以让开发者知道每个部署是什么版本吗 这在最新版本的 ServiceStack 中是可能的 您只需在 AppHost 中设置 ServiceStack API 版本即可 publi
  • 根据内容将输入拆分为多个输出?

    假设有一个如下所示的文件 xxxx aa whatever yyyy bb whatever zzzz aa whatever 我想将其分成 2 个文件 其中包含 first xxxx aa whatever zzzz aa whateve
  • 如何迭代 getElementByClassName 返回

    我读过几篇关于 GetElementsByClassName 的文章 但我很难理解如何迭代它返回的内容 我正在编写纯 JavaScript 代码 以便当用户滚动时我的导航栏将采用 固定 位置 但是 当发生此更改时 导航栏列表项需要更改格式