getElementsByTagName("*") 总是更新吗?

2024-04-06

我已经编写了这段代码:

var foo=document.createElement("div");

var childs=foo.getElementsByTagName("*");

console.log(childs.length);//0 OK

var a=document.createElement("a");

foo.appendChild(a);

console.log(childs.length);//1 WTF?

一把小提琴:http://jsfiddle.net/RL54Z/3/ http://jsfiddle.net/RL54Z/3/

我不必写childs=foo.getElementsByTagName("*");在第五行和第六行之间,这样childs.length已更新。

怎么会这样?


DOM 中的大多数节点列表(例如从getElementsBy*, querySelectorAll, and Node.childNodes) 不是简单的数组,而是NodeList对象。NodeList对象通常是“活动的”,因为对文档的更改会自动传播到Nodelist目的。 (一个例外是结果querySelectorAll,即not live!)

正如您在示例中看到的,如果您检索所有节点列表a元素,然后添加另一个a文档的元素,即a将出现在您的 NodeList 对象中。

这就是为什么在对文档进行更改的同时迭代 NodeList 是不安全的。例如,这段代码将以令人惊讶的方式运行:

var NodeListA = document.getElementsByTagName('a');

for (var i=0; i<NodeListA.length; ++i) {
   // UNSAFE: don't do this!
   NodeListA[i].parentNode.removeChild(NodeListA[i]);
}

将会发生的情况是您最终会跳过元素!要么从 NodeList 的末尾向后迭代,要么将 NodeList 复制到普通数组(不会更新),然后使用它。

阅读有关 NodeList 的更多信息,请访问Mozilla MDC 站点 https://developer.mozilla.org/En/DOM/NodeList.

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

getElementsByTagName("*") 总是更新吗? 的相关文章

  • Vue.js + Element UI:在更改时获取“event.target”

    我无法获取在事件处理程序中触发事件的 html 字段 在 javascript 中是event target 我有一个表格 附加到更改事件函数的输入元素 管理更改事件的函数 我的代码如下 var Main methods change pa
  • 禁用 chrome React DevTools 以进行生产

    我正在尝试使用 gulp 和 envify 对我的 React 应用程序进行浏览器化以设置 NODE ENV 因此 我可以删除反应警告 控制台中的错误报告 甚至我的代码来禁用某些功能 例如react addons perf的要求 而且效果很
  • 计算div中有多少个元素

    我有一个div 里面有span 有没有一种方法可以计算 div 中有多少个元素 然后将其作为值给出 例如 一个 div 中有 5 个跨度 那么它会对其进行计数并发出警报 5 请使用 JavaScript 谢谢 如果你想要后代的数量 你可以使
  • 使用 lambda 更新 amazon s3 对象元数据而不执行对象复制?

    是否可以使用 lambda 函数添 加或更新 s3 对象元数据而不复制对象 这篇 2 年前的帖子说我们确实需要复制一份 https stackoverflow com questions 32646646 how do i update m
  • 将表单传递给 AngularJS 组件进行验证

    我正在将旧代码库迁移到 AngularJS 1 5 所推广的新组件架构 我在对较大的表单执行此操作时遇到了问题 传统上 我会附加表单验证 如下所示
  • 如何使用 javascript/ASP.NET/CSS 旋转和淡入淡出背景图像

    我需要随机淡入淡出背景图像 这将是一个定时函数 例如每 5 秒一次 我需要使用 ASP NET Javascript CSS 或全部三者来完成此操作 请大家帮帮我 谢谢 Cycle 一个 jQuery 插件 是一个非常灵活的图像旋转解决方案
  • 如何使用 RSpec 测试 javascript 重定向?

    我正在使用 xhr post 与控制器交互 并且我期待重定向 在 js erb 中 我有 window location href address 手动测试 浏览器会正确重定向 我如何使用 RSpec 测试它 response should
  • 使用 Moment.js 从 ISO 字符串中提取 utcOffset

    使用 moment js 我尝试从 ISO 日期字符串中提取偏移量 以便稍后在格式化纪元时间戳时使用该偏移量 以确保时间戳的转换位于同一时区 即使字符串中的偏移量为 0400 结果始终为0 var currentTime 2015 03 1
  • 如何在 Ionic 2 中动态创建具有特定类的模式?

    嗨 我已经被一个问题困扰好几天了 到目前为止还没有研究证明足够 我正在尝试在 Ionic 2 中创建一个具有特定类 或 id 的简单模式 我需要这样简单的东西
  • 如何验证单选按钮?

    我的 Rails 应用程序中有一个单选按钮 我想编写一个 java 脚本代码 在未选择任何选项时验证这一点 在你的 votes 类中做类似的事情 class Myvotes lt ActiveRecord Base validates vo
  • 任何 JavaScript 代码都是有效的 TypeScript 代码吗?

    目前我已经开始学习TypeScript 从我研究过的文档来看TypeScript 我看到一些纯的样品JavaScript代码可以编译为TypeScript code 我的问题是 TypeScript 语言的设计方式是否使任何 JavaScr
  • React:未捕获的引用错误:未定义需求

    我正在阅读 React 教程 http facebook github io react docs animation html http facebook github io react docs animation html 并且我无法
  • setTimeout() 的问题

    这是我的代码 我想要它做的是写 0 等待一秒 写 1 等待一秒 写 2 等待一秒 等等 而是写 5 5 5 5 5 for i 0 i lt 5 i setTimeout document write i 1000 http jsfiddl
  • Immutable.js 推入嵌套对象中的数组

    假设有一个对象 const object foo bar 1 2 3 我需要推动4 to object foo bar array 现在我正在这样做 const initialState Immutable fromJS object co
  • 如何设置第三方 cookie

    我如何设置第三方 cookie 我有要求设置cookie 并且cookie将在访问的网站中启用 就像我在访问cde com或def com或ghi com时在abc com中设置cookie一样 所以设置的cookie将在所有网站上获取 我
  • c3js数据标签的位置

    有没有可能的方法来更改数据上方标签的位置c3条形图 在官方文档中 很好地解释了如何通过操作 y 和 x 整数来更改 x 和 y 测量轴上标签的位置 但我没有找到任何数据标签 我试图用简单的方式指出它d3其上c3是基于但是console lo
  • 401 未经授权的帖子回复

    我一直在使用 Angular 模板制作 Node js 网站 但我无法在 DB Mongo 上创建数据 这是代码 节点路由 var Property mongoose model Property var jwt require expre
  • 如何清除画布中图像上的矩形

    我需要清除画布中图像上绘制的矩形 而不损坏现有图像 我可以绘制小矩形点并将其清除 但问题是 当我清除矩形时 它在图像上仍保留为白色小斑点 有人可以告诉我如何清除图像上的矩形而不损坏现有图像 我使用了以下方法来清除矩形 但没有用 1 cont
  • 使用来自Processing-JS的JSON

    我想使用编写一个应用程序处理 JS http processingjs org 并且我希望能够使用服务器端数据加载它 我还没有编写服务器端 所以我可以使用任何东西 但似乎明显的 AJAX 事情是使用 JSON 将数据上传到页面中 如何从我的
  • 为什么转换 new.Date() .toISOString() 会改变时间?

    我正在以两种不同的格式在数据库中插入日期 这是作为日期时间插入 var mydate mydate new Date document getElementById clockinhour value mydate toISOString

随机推荐

  • 一个 .PHP 文件可以编辑另一个 .PHP 文件吗?

    所以我有一个常量文件 我想让用户定义它们 然后使用该全局常量编辑我的 php filr 不是 xml 真正的 PHP 文件 以这样的代码为例 如何从另一个 PHP 文件编辑这个 php 文件 是否可以 顺便说一句 将来我不仅想实现常量重新定
  • 使用 Active Directory / LDAP 进行表单身份验证

    首先 感谢您的浏览 我的问题 在 NET Web 应用程序中 对由各种用户 公司 用户代理等组成的 WAN 上的外部网络使用 Windows 身份验证是一个坏主意吗 背景 我是外网快速 非常快 Web 应用程序的首席开发人员 该应用程序将允
  • 异常导致 Future 永远无法完成

    给出以下代码 import scala concurrent ExecutionContext import java util concurrent Executors val ec ExecutionContext fromExecut
  • Angular 不提供 manifest.webmanifest

    在我的 Angular 10 应用程序中 我将其发布到 Azure 并且加载正常 但是 当我访问时 manifest webmanifest 没有被提供服务https THESITE azurewebsites net manifest w
  • 使用 MotionEvent 在视图上同时移动两个位图

    我使用以下类 android 中的简单 2D 图形 在视图上创建了两个位图 并徘徊以实现位图可以独立移动 我为此调用motionevent 方法 当前问题 我不明白为什么在下面的代码中只有一个对象向右移动 例如使用此代码 仅移动 不 位图
  • 如何在另一个不同样式的div中正确显示选中的属性?

    我对 jQuery 很陌生 代码的第一部分是检查输入 检查后应按以下格式显示检查的项目 如何在 jquery 的帮助下做到这一点 ul class approval approval scrolltab mt 3 li div class
  • 在 d3.js v4 中创建 asinh(反双曲正弦)刻度

    这将替代对数刻度 以便它可以处理负数 尽管我一直在尝试使用 d3 的对数刻度源作为起点 但还没有看到很多自定义刻度的示例 据我所知 没有办法在 D3 中制作自定义比例 至少不是您正在寻找的意义上 所有 D3 尺度均分两步进行缩放 使用域 在
  • ajax加载后检查元素是否存在

    现在是星期五早上 我的大脑似乎出现了故障 我想执行大量脚本 但仅当页面上存在某个元素时才执行 这也可能是通过 ajax 加载的 这意味着当我做类似的事情时 if foo length gt 0 Do stuff 它只会在直接页面加载时加载
  • 仅当单元格中存在值时才发出警报消息

    我希望仅当单元格中存在值时才会出现警报框 但每当我删除单元格值时 都会出现警报消息提示 这是代码 function sendMailEdit e var sheet SpreadsheetApp getActiveSpreadsheet v
  • 如何将 Nvd3 图表导出为 jpeg 或 png 格式

    有没有更好或简单的方法将 nvD3 图表导出为 jpeg 或 png 图像格式 我在 Canvas 上尝试了 Javascript SVG 解析器和渲染器http code google com p canvg http code goog
  • 如何检测网站是否是使用 React 构建的?

    例如 当我浏览公共万维网上的任何网站时加拿大汽车大师 https ca cargurus com 我如何检测这个网站是否是使用React https reactjs org Using React Developer Tools 镀铬扩展
  • 将 jQuery JSON 对象发布到 NodeJs Restify

    我想知道为什么在 a 中发布一个简单的 JSON 字符串如此困难 parameter重新调整 我遵循了很多例子 但没有发现任何具体的东西 我在前端有以下代码 btnDoTest click function var jData hello
  • C# 如何在当前屏幕上显示表单?

    我想在调用它的同一窗口中显示一个新表单 我知道一种通过类似于下面的代码在主屏幕或虚拟屏幕上显示此表单的方法 MyForm Location Screen PrimaryScreen Bounds Location 但我想在当前屏幕上显示它
  • 在 ActiveMQ 中查看消息时,代理无法使用可序列化类:java.lang.ClassNotFoundException

    我想查看已在 ActiveMQ 队列中排队的消息内容 我打开网络控制台 http localhost 8161 admin queues jsp http localhost 8161 admin queues jsp 并单击队列消息的消息
  • 子列表抛出 ConcurrentModificationException [重复]

    这个问题在这里已经有答案了 我有非常简单的代码 List
  • Java获取IPv4地址

    关于这一点link https stackoverflow com questions 8083479 java getting my ip address使用提供的代码来生成 IP 地址 String ip try Enumeration
  • 使opencv视频捕捉速度更快

    所以我创建了一个神经网络 CNN 可以使用 opencv 实时预测一个人的性别 一切都很完美 但是 当我运行 OpenCv 代码时有很多滞后 我的网络摄像头还不错 这里是我的代码 Real time Face Gender Recognit
  • .Net 中泛型的使用示例(C#/VB.NET)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有哪些在 C VB NET 中使用泛型的示例以及为什么要使用泛型 简而言之 您可以使用额外的标记来声明类型或方法来指示通用位 clas
  • 如何在 svg 元素中插入换行符?

    我每行有两行文字
  • getElementsByTagName("*") 总是更新吗?

    我已经编写了这段代码 var foo document createElement div var childs foo getElementsByTagName console log childs length 0 OK var a d