【问题标题】:Does Javascript While Loop check DOM every iterationJavascript While Loop 每次迭代都会检查 DOM
【发布时间】:2015-03-23 11:27:57
【问题描述】:

while 循环会在每次迭代时加载 DOM,还是会像开始时一样使用 DOM 循环?

例如

function whileExample(){
    while(a > b){
        $('p').each(function(){
            num++
        });
        return num;
    }
)

会看到自循环开始后添加的“p”

【问题讨论】:

  • 循环本身不会检查 DOM。如果在检查 DOM 的循环中执行了一些 操作,那么它将检查 DOM。如果没有,则不会。
  • DOM 是在页面加载时创建的数据结构。它永远不会再生。如果你不专门操纵它,它就不会发生任何事情。操作它不会重新加载它,它只会改变结构。
  • 你有你要问的例子吗?这将取决于代码。即如果您在循环中选择 dom 元素
  • 请注意,return 循环内的 return 语句将永远不会运行超过一次。

标签: javascript loops dom


【解决方案1】:

某些获取元素的 DOM 方法会返回一个实时列表,如果 DOM 发生变化,该列表将发生变化,但 jQuery 在获取元素时会生成该列表的副本。

当您循环 jQuery 对象中的元素时,您正在循环创建 jQuery 元素时存在的元素。

while 循环每次迭代都会创建一个新的 jQuery 对象,以便获取当时存在的元素,但是当您从循环内返回时,只会进行一次迭代。

但是请注意,由于没有代码可以更改循环中的 DOM,因此不可能在循环期间将任何元素添加到 DOM 中。 Javascript 是单线程的,所以在函数运行时没有其他代码可以运行。

【讨论】:

  • 作为选择器被传递给循环内的jQuery,它每次都会查询DOM。如果它存储在循环之前的变量中,则 jQuery 对象在您操作 DOM 时不会得到更新。
【解决方案2】:

只有一个 DOM,植根于“文档”对象。它是在页面加载时创建的。 jQuery 函数以及在 DOM 上运行的所有其他操作都会在您调用它时在 DOM 中搜索,因此它会在当前文档中找到所有 p。它不会找到那些被删除的,它会找到那些被添加的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-19
    • 2011-10-11
    • 2020-08-27
    • 2022-01-14
    • 2011-08-16
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多