如何等到元素存在?

在前端开发中,有时候需要等待一个元素加载完毕后再进行后续的操作。这种情况下,我们就需要使用一些技巧来等待元素的出现。本文将介绍几种常见的方法,以及它们的优缺点和适用场景。

1. 定时器轮询

最简单的方法是使用定时器轮询。通过 setInterval 或 setTimeout 不断地检查元素是否已经存在,直到出现为止。例如:

-------- ------------------------ --------- -
  ----- ---------- - -------------- -- -
    ----- ------- - ---------------------------------
    -- --------- -
      --------------------------
      ------------------
    -
  -- ------
-

------------------------- --------- -- -
  ---------------------- ---------
---

这种方法的好处是代码简单易懂,适用于简单的场景。但是缺点也很明显,会不断地轮询浪费资源,而且无法处理元素动态删除和重新添加的情况。

2. MutationObserver 监听

MutationObserver 是一个 Web API,可以监听 DOM 的变化。当节点被添加或删除时,MutationObserver 可以触发回调函数。因此,我们可以通过监听根节点来判断目标元素是否存在。例如:

-------- ------------------------ --------- -
  ----- -------- - --- ---------------------------- -- -
    ---------------------------- -- -
      ----- ---------- - --------------------------------
      -- --------------------- -- ------------ -- ------------------------ -
        ----------------------
        ----------------------------- -- ------------ -- -------------------------
      -
    ---
  ---
  ------------------------------------------ - ---------- ----- -------- ---- ---
-

------------------------- --------- -- -
  ---------------------- ---------
---

这种方法的好处是可以避免不必要的轮询,同时也能处理元素的动态添加和删除。但是,它的缺点是代码相对复杂,需要理解 MutationObserver 的工作原理。

3. Promise 包装

使用 Promise 来等待元素出现也是一种常见的方法。我们可以将定时器轮询和 MutationObserver 监听包装成 Promise,使代码更加简洁。例如:

-------- ------------------------ -
  ------ --- ----------------- -- -
    -- ---------------------------------- -
      ------------------------------------------
      -------
    -

    ----- -------- - --- ---------------------------- -- -
      ---------------------------- -- -
        ----- ---------- - --------------------------------
        -- --------------------- -- ------------ -- ------------------------ -
          ----------------------
          ---------------------------- -- ------------ -- -------------------------
        -
      ---
    ---

    ------------------------------------------ - ---------- ----- -------- ---- ---

    -------------- -- -
      ----- ------- - ---------------------------------
      -- --------- -
        ----------------------
        -----------------
      -
    -- ------
  ---
-

---------------------------------------- -- -
  ---------------------- ---------
---

这种方法结合了前两种的优点,代码简洁且适用于各种场景。但是需要注意的是,由于 Promise 包装了异步操作,所以在使用 await 或 then 方法时需要注意错误处理。

总结

等待元素出现是前端开发中常见的问题,本文介绍了几种常用的方法:定时器轮询、MutationObserver 监听和 Promise 包装。不同方法的优缺点和适用场景也有所不同,具体应该根据实际情况选择。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/9553


猜你喜欢

  • Web页面的加载和执行顺序

    Web页面的加载和执行顺序是前端开发过程中非常重要的一部分。了解这个过程可以帮助我们更好地优化网页性能,提高用户体验。本文将深入探讨Web页面的加载和执行顺序,并提供一些实际的代码示例。

    7 年前
  • 解析 parseInt(null, 24) = = = 23

    在 JavaScript 中,parseInt() 函数可以将字符串转换成整数。它接收两个参数:要解析的字符串和一个可选的表示进制的参数。例如,parseInt("10") 返回 10 ,而 pars...

    7 年前
  • 在屏幕上弹出一个窗口?

    在 Web 开发中,弹出窗口是一种常见的交互方式。本文将介绍如何使用前端技术,在屏幕上弹出一个窗口,并提供详细的指导和示例代码。 前置知识 在学习如何弹出窗口之前,你需要了解以下前置知识: HTML...

    7 年前
  • JavaScript 中的“断言”是什么?

    在编写 JavaScript 代码时,我们经常需要检查变量或表达式是否符合某些条件。通常,我们使用 if 语句或三元运算符等控制结构来实现这一点。但有时候我们需要更强大的工具来进行调试和测试,这就是“...

    7 年前
  • 我如何通过指数在车把访问的访问数组项?

    在前端开发中,我们经常需要使用数组来存储和操作数据。在处理数组时,有时候我们需要以类似于车把的方式循环访问数组项。这个需求可以通过使用指数来实现。 使用指数访问数组项 在 JavaScript 中,我...

    7 年前
  • 如何在JavaScript中触发窗口调整大小事件?

    JavaScript是前端开发中必不可少的一部分,而窗口调整大小事件也是常见的需求。本文将详细介绍如何在JavaScript中触发窗口调整大小事件,并提供示例代码和实用技巧。

    7 年前
  • 禁用单击引导模态区域外部关闭模态

    在前端开发中,模态框是一个常见的组件,它可以帮助我们在用户与页面交互时提供更好的体验和提示。然而,在某些情况下,我们希望禁用用户在单击模态框外部时关闭模态框,以确保用户完成必要的操作或者理解提示信息。

    7 年前
  • 巴贝尔装载JSX syntaxerror:意外的标记[复制]

    在使用 Babel 转换 JSX 时,经常会遇到以下错误信息: ------------ ---------- -----这个错误通常表示你的代码中存在无法识别的语法。

    7 年前
  • 我如何检查文件是否存在于jQuery或纯JavaScript中?

    在前端开发中,有时候需要检查某个文件是否存在。比如说,在加载一个 JavaScript 文件之前,你需要确定它是否已经被加载了。这篇文章将介绍如何用 jQuery 和纯 JavaScript 来检查文...

    7 年前
  • 如何从window.location删除哈希(URL)JavaScript网页无刷新?

    在前端开发中,有时候我们需要对当前页面的URL地址进行一些操作,比如删除URL中的哈希部分。本文将介绍如何使用JavaScript在不刷新页面的情况下删除URL中的哈希部分。

    7 年前
  • Bower:enogit Git没有安装或没有在路径

    Bower 是一个前端包管理器,可以帮助开发者高效地管理项目中需要的第三方依赖库。然而,在使用 Bower 安装依赖库的过程中,有时会遇到报错信息:"enogit Git没有安装或没有在路径",这是因...

    7 年前
  • parseInt() 和 Number() 之间的区别是什么?

    在 JavaScript 中,我们经常需要将字符串转换为数字。而这时候就会用到两个内置函数:parseInt() 和 Number()。虽然它们都可以将字符串转换为数字,但是它们之间还是有一些区别的。

    7 年前
  • 如何在 JavaScript 中输出 ISO 8601 格式化字符串?

    ISO 8601 是一种国际标准,用于表示日期和时间。在前端开发中,常常需要将日期对象格式化为 ISO 8601 字符串。本文将介绍如何使用 JavaScript 输出 ISO 8601 格式化字符串...

    7 年前
  • 在JavaScript对象文字中使用键的变量

    在编写 JavaScript 代码时,我们通常会创建一个对象并为其定义一些属性和方法。这些属性和方法通常是硬编码的键和值对,但有时候我们需要使用可变的键来引用对象的属性。

    7 年前
  • 如何让指数在车把每个帮手吗?

    在前端开发中,我们经常需要进行数据可视化,显示和处理大量的数字和数据。其中,指数(Exponential)是一种常见的数值形式,在某些情况下,我们需要将指数转换成普通数值来更好地呈现数据。

    7 年前
  • 调用没有括号的函数

    在前端开发中,我们经常需要调用函数来实现各种功能。大部分情况下,函数调用需要使用括号将参数传递给函数。但是,在某些情况下,我们可能会遇到不需要使用括号就能调用函数的情况。

    7 年前
  • 删除JSON属性[副本]

    在前端开发中,我们经常需要处理 JSON 数据。有时候,我们会遇到需要删除 JSON 对象中的某个属性的情况。本文将介绍如何使用 JavaScript 删除 JSON 对象中的属性。

    7 年前
  • JavaScript:如何从一个对象直接生成格式化的易于阅读的JSON?[重复]

    很抱歉,我无法为您提供重复的内容。但是,我可以为您提供一篇新的前端技术文章:如何使用CSS实现响应式布局。 JavaScript:如何从一个对象直接生成格式化的易于阅读的JSON? 在前端开发过程中,...

    7 年前
  • 如果删除了DOM元素,它的侦听器是否也从内存中移除?

    在前端开发中,我们经常需要操作 DOM 元素。当我们不再需要某个元素时,通常会使用 remove() 函数将其从文档树中删除。但是,删除元素后,元素上的事件监听器(例如 click、mouseover...

    7 年前
  • 如何使用 Underscore.js 报表模板

    Underscore.js 是一款常用的 JavaScript 工具库,它提供了许多辅助函数和工具,简化了前端开发的许多任务。其中包括一个强大的模板引擎,可以用来渲染 HTML、XML 和其他文本数据...

    7 年前

相关推荐

    暂无文章