首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

更新dom,而不是附加jQuery

在Web开发中,更新DOM(Document Object Model)是一个常见的任务,尤其是在处理用户交互和动态内容时。jQuery是一个流行的JavaScript库,它简化了HTML文档遍历、事件处理、动画和Ajax交互。然而,随着现代浏览器的发展和原生JavaScript API的改进,直接使用原生JavaScript来更新DOM变得越来越高效和流行。

基础概念

DOM(Document Object Model) 是一个编程接口,它表示HTML和XML文档的结构,并允许程序和脚本动态地访问和更新文档的内容、结构和样式。

jQuery 是一个快速、小巧且功能丰富的JavaScript库。它简化了HTML文档遍历、事件处理、动画和Ajax交互,使得Web开发更加便捷。

为什么选择更新DOM而不是附加jQuery

  1. 性能:原生JavaScript通常比使用jQuery更快,因为它避免了库的额外开销。
  2. 简洁性:现代JavaScript提供了简洁的API来操作DOM,减少了代码量。
  3. 兼容性:随着浏览器对ES6及更高版本标准的支持,原生JavaScript在大多数情况下都能提供良好的兼容性。
  4. 学习曲线:对于新手来说,直接学习原生JavaScript可以更好地理解Web开发的基础。

类型与应用场景

  • 类型
    • 直接DOM操作:使用getElementByIdquerySelector等方法获取元素,并使用innerHTMLtextContentsetAttribute等方法更新元素。
    • 使用DocumentFragment:这是一种轻量级的文档对象,可以用来组装一组DOM子节点,然后一次性添加到文档中,以提高性能。
    • 使用模板引擎:如Handlebars、Mustache等,它们可以帮助生成HTML并插入到DOM中。
  • 应用场景
    • 动态内容更新:如新闻网站的内容刷新。
    • 表单验证:实时反馈用户输入的正确性。
    • 交互式UI组件:如滑块、下拉菜单等。

示例代码

以下是一个简单的例子,展示了如何使用原生JavaScript来更新DOM:

代码语言:txt
复制
// 获取元素
let element = document.getElementById('myElement');

// 更新元素的文本内容
element.textContent = '新的内容';

// 更新元素的属性
element.setAttribute('class', 'active');

// 创建一个新的元素并添加到DOM中
let newElement = document.createElement('div');
newElement.textContent = '这是一个新元素';
document.body.appendChild(newElement);

// 使用DocumentFragment批量更新DOM
let fragment = document.createDocumentFragment();
for (let i = 0; i < 5; i++) {
    let li = document.createElement('li');
    li.textContent = `列表项 ${i}`;
    fragment.appendChild(li);
}
document.getElementById('myList').appendChild(fragment);

遇到问题及解决方法

问题:更新DOM时页面闪烁或性能不佳。

原因:频繁的DOM操作可能导致浏览器重绘和回流,从而影响性能。

解决方法

  • 使用DocumentFragment来批量更新DOM。
  • 使用requestAnimationFrame来优化动画和频繁更新的UI。
  • 避免在循环中直接操作DOM,可以先将变化应用到变量或文档片段上,然后一次性更新到DOM。

通过这些方法,可以提高DOM操作的效率,减少页面闪烁,提升用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么是删除缓存,而不是更新缓存?

比如可能更新了某个表的一个字段,然后其对应的缓存,是需要查询另外两个表的数据并进行运算,才能计算出缓存最新的值的。 另外更新缓存的代价有时候是很高的。...是不是说,每次修改数据库的时候,都一定要将其对应的缓存更新一份?也许有的场景是这样,但是对于比较复杂的缓存数据计算的场景,就不是这样了。 如果你频繁修改一个缓存涉及的多个表,缓存也频繁更新。...其实删除缓存,而不是更新缓存,就是一个 lazy 计算的思想,不要每次都重新做复杂的计算,不管它会不会用到,而是让它到需要被使用的时候再重新计算。...2)最初级的缓存不一致问题及解决方案 问题:先更新数据库,再删除缓存。如果删除缓存失败了,那么会导致数据库中是新数据,缓存中是旧数据,数据就出现了不一致。 解决思路:先删除缓存,再更新数据库。...如果数据库更新失败了,那么数据库中是旧数据,缓存中是空的,那么数据不会不一致。因为读的时候缓存没有,所以去读了数据库中的旧数据,然后更新到缓存中。

17710
  • 10个基于web的JavaScript最优秀的应用程序库和框架

    例如,如果您是在一个电子商务网站工作,而不仅仅是提供信息,那么这个库可能不是最好的选择。...考虑到这一点,它不依赖于浏览器文档对象模型(DOM),而是使用一个快速显示信息的轻虚拟DOM。React最棒的一点是它是声明性的,这意味着你要告诉框架你想做什么,而不是怎么做。...控制器是DOM组件背后的行为。有了 Angular,就有可能以一种既自然又直接的方式创造新的行为。这些扩展最终看起来像是HTML的附加部分,而不是固定的东西。...这个产品更像jQuery而不是jQueryUI,因为您不使用它来创建用户界面。相反,您可以创建响应事件的代码——客户端生成事件,服务器响应这些事件。用户界面是显示任何结果的独立元素。...基本上,reactivity指的是在Vue中自动更新一个JavaScript对象,并且不引人注意地更新Vue模板。 Vue是为任何具有HTML、CSS和JavaScript工作知识的人而构建的。 ?

    2.3K20

    02-老马jQuery教程-jQuery事件处理

    fn的内部作用域中this指向当前的DOM对象(注意不是jQuery的包装对象) 返回值: jQuery的包装对象!!!...第二,只触发jQuery对象集合中第一个元素的事件处理函数。 第三,这个方法的返回的是事件处理函数的返回值,而不是据有可链性的jQuery对象。...在绑定事件之前,一定要确保页面中的DOM元素已经就绪。如果没有就绪或者后面动态添加的DOM元素则不会动态更新事件处理程序。 参数: type: 含有一个或多个事件类型的字符串,由空格分隔多个事件。..., fn) 说明:jQuery 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效。...event.currentTarget 在事件冒泡阶段中的当前DOM元素 event.delegateTarget 此属性是最经常有用是通过过.delegate() 或.on()附加委派的事件,事件处理程序附加在正在处理的元素的祖先上

    2.7K80

    jQuery.data() 的实现方式

    jQuery.data() 的实现方式     jQuery.data() 的作用是为普通对象或 DOM Element 附加(及获取)数据。     ...为 DOM Element 附加数据;DOM Element 也是一种 Object ,但 IE6、IE7 对直接附加在 DOM Element 上的对象的垃圾回收存在问题;因此我们将这些数据存放在全局缓存...而 “cache” 又是 “obj” 的一个属性,在 jQuery 1.6中,这个属性的名称是 “jQuery16”加上一个随机数(如下面提到的 “jQuery16018518865841457738”...不能有效回收 DOM Element 上附加的对象引用),jQuery采用了与普通对象有所不同的方式附加数据。     ...Element (当然,也可以用 jQuery 的选择器),然后在这个 DOM Element 上附加了一个属性,随后就从 DOM Element 上取出了附加的属性并输出。

    99670

    02-老马jQuery教程-jQuery事件处理

    fn的内部作用域中this指向当前的DOM对象(注意不是jQuery的包装对象) 返回值: jQuery的包装对象!!!...第二,只触发jQuery对象集合中第一个元素的事件处理函数。 第三,这个方法的返回的是事件处理函数的返回值,而不是据有可链性的jQuery对象。...在绑定事件之前,一定要确保页面中的DOM元素已经就绪。如果没有就绪或者后面动态添加的DOM元素则不会动态更新事件处理程序。 参数: type: 含有一个或多个事件类型的字符串,由空格分隔多个事件。...], fn) 说明:jQuery 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效。...event.currentTarget 在事件冒泡阶段中的当前DOM元素 event.delegateTarget 此属性是最经常有用是通过过.delegate() 或.on()附加委派的事件,事件处理程序附加在正在处理的元素的祖先上

    6.5K00

    浏览器中的JavaScript:文档对象模型与 DOM 操作

    html 元素包含一个 head ,而 head 内又有一个 title。然后 body 中包含一个 h1。...我们不是一步一步地去命令浏览器,而是声明我们需要什么 HTML 元素,而库可以处理剩下的部分。 DOM 操作和 jQuery 此时你可能会想:“我可以只使用jQuery吗?...这背后有一个十分正当的理由:原生 DOM API 已经非常完整且成熟到足以使 jQuery 过时。 如果你想坚持用原生 JavaScript 实现简单的交互和操作。...在创建、修改、删除 HTML 元素时,我们会碰到 “DOM 操作”。在过去即使对于更简单的任务,我们也要依赖于 jQuery,但今天本机 API 已经互相兼容并且足够成熟以使 jQuery 过时。...虽然 jQuery 不会很快的消失,但每个 JavaScript 程序员都必须知道该如何使用本机 API 去操作 DOM。

    65810

    高质量jQuery代码的十二条经验

    1、正确引用jQuery 尽量在body结束前才引入jQuery,而不是在head中。 借助第三方提供的CDN来引入jQuery,同时注意当使用第三方CDN出现问题时,要引入本地的jQuery文件。...因为ID选择器和元素选择器是原生的JavaScript操作,而类选择器不是,大家顺便可以看下find context 区别,find() children区别。...自从jQuery 1.7版本后,on() 附加事件处理程序的首选方法。然而,出于一致性考虑,你可以简单的全部使用 on()方法。...许多复杂的操作 $container.append($element); 7.2、最小化DOM更新 重布局和重绘是WEB页面中最常见的也是最昂贵的两种操作。...当改变样式,而不改变页面几何布局时,将会发生重绘。隐藏一个元素或者改变一个元素的背景色时都将导致一次重绘。 当对页面结构进行更新时,将导致页面重布局。

    1.2K40

    jQuery已“死”?为清除技术债,我们删掉了前端所有jQuery依赖

    而 JQuery 开发者可以使用 CSS 选择器和函数可以轻松地遍历和操作 DOM, 此外,JQuery 还提供了一些开箱即用的函数来做动画 DOM 元素,而无需弄乱 CSS。...DOM 元素和窗口等等。...“对我来说,他们 (jQuery ) 就像是那个随着时代变迁没有更新知识的老灰胡子。”有网友直言。 “现在,大多数事情都不再需要 jQuery 了。”...但随着 GitHub 成长为一家拥有数百名工程师的公司,jQuery 带来的价值已经随着时间的推移而下降。比如技术债会随着依赖项的增多而增长,给企业带来很大的维护成本。...随着时间的推移, WordPress 肯定会逐步更新技术,这是一个渐进的过程,jQuery 的最终去留也很难说。但不可否认的是,jQuery 为前端带来了重大的影响。

    79330

    JavaScript 事件委托 以及jQuery对事件委托的支持

    真正做事情的是乙,即被委托人,而委托人甲 则是把相应的信息传递给被委托人乙,自己本该做的事情交给了乙来做,如下图这个例子: ?       那么在我们javascript 里,什么是事件委托呢?...jQuery还有另外一种方式:将元素的事件处理委托给DOM根节点来处理,这种方式是live()方式: live(type, [data], fn) type   : 事件类型 data :附加的额外数据...fn   : 相应的处理函数 描述:jQuery 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效。...简化了dom节点更新时,相应事件的更新 Allows to use innerHTML without additional processing. 缺点: 第一,要求事件在IE中必须冒泡....大多数的事件会冒泡,但是并不是所有的。对于其他的浏览器而言,捕获阶段也会同样适用。

    82860

    Web Components从技术解析到生态应用个人心得指北

    区别总结语义:自定义标签仅在语义上是自定义的,而没有附加任何特殊的行为;相反,自定义元素通过 Custom Elements API 注册,并可以包括复杂的逻辑和状态。...功能性:自定义元素支持完整的生命周期管理,提供创建时、附加到 DOM、属性变动等时机的钩子,而自定义标签则没有这些功能。...Shadow host: 一个常规DOM节点,Shadow DOM会被附加到这个节点上。Shadow tree: Shadow DOM内部的DOM树。...性能优化:React 的虚拟 DOM 可以通过最小化实际的 DOM 操作来提升性能,这一点在批量更新 UI 或大型应用中尤为明显。...Vue3放弃Web Components 响应式系统:Vue 的响应式系统使得数据和视图能够自动同步更新,而 Web Components 没有内建这样的响应式机制。

    67610

    时隔一年多jQuery发布3.6.1新版本,你还在用JQ吗?

    在今年8月26日 jQuery 终于是更新了一个 3.6.1 维护版本,距离上一个版本发布时间已过去一年零五个月之久,其维护者表示接下来主要考虑修复聚焦与失焦(focus & blur)的问题以及一些难以捉摸的边缘情况...以下是 jQuery 3.6.1 的一些改进:基础设施改进在这个版本中团队做了很多工作来更新项目的一些测试和构建基础设施,包括将 CI 从 Travis CI 迁移到 GitHub Actions,在...Node 16 而不是 Node 15 上进行测试,通过 https 加载他们的测试监听器,以及添加更多自定义构建的准确测试。...附加带有 HTML 注释的脚本团队在正则表达式中发现了一个问题,即在附加脚本时从脚本中去除 HTML 注释,最终在某些边缘情况下删除了部分可执行脚本。...jQuery,甚至唯恐避之不及,但它曾经的功绩仍不可磨灭,jQuery 致力于消除浏览器差异,简化了操作 DOM 的方法,让早期的开发者们能轻松实现动画、修改 CSS 等各种操作,说它是 JavaScript

    2.2K20

    由重构进阶前端开发入门 (一) DOM 操作

    有人可能会说它们就是页面里的 HTML 标签,但这么描述其实不够确切,W3C 对其的标准定义是: “W3C 文档对象模型 (DOM) 是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容...而除了页面里的标签外,我们也可以自己手动创建 DOM 的,所以 DOM 的来源不只是页面里的 HTML 标签。 获得 DOM 对象之后,我们还可以对它们做一系列操作,以满足日常各种页面开发需求。...后,修改 DOM 的 textContent 属性,浏览器自动反馈到页面更新,就完成了修改页面内容的常见操作。...常用的 Attribute,例如 id、title 等,会被浏览器自动转为 Property 附加到 DOM 对象上,方便日常操作。...因此,后续文章将以 jQuery 为例,在介绍原生 DOM 操作 API 之后,给出 jQuery 的处理方案进行对比。

    79730

    4-Jquery学习四-事件操作

    ; }); 此外,我们还可以同时绑定多个事件,并为事件处理函数传递一些附加的数据,我们可以通过jQuery为事件处理函数传入的参数event(Event事件对象)来进行处理: var obj...2-triggerHandler()触发事件只针对jQuery对象中的第一个匹配元素。 3-triggerHandler()触发的事件不会在DOM树中冒泡,因此事件不会冒泡传递到它的任何祖辈元素。...4-triggerHandler()的返回值是对应事件处理函数的返回值,而不是当前jQuery对象本身。...此外,通过jQuery为事件处理函数传入的参数Event对象,我们可以获取当前事件的相关信息(比如事件类型、触发事件的DOM元素、附加数据等): var minSize = { width: 800,...jQuery 事件就写这么多了, 后面如果有新的内容仍会及时更新。 英语小贴士: I've heard so much about you! 久仰大名。

    4.5K90

    关于虚拟DOM(面试必看)

    XSS 不会直接攻击网页,而是通过嵌入 JavaScript 代码的方式,将恶意攻击附加到用户的请求中来攻击用户。它可以被用作窃取用户信息,或者恶意增删用户的一些资料。...虚拟 DOM 不是别的,正是前端开发们为了追求更好的研发体验和研发效率而创造出来的高阶产物 虚拟 DOM 并不一定会带来更好的性能,React 官方也从来没有把虚拟 DOM 作为性能层面的卖点对外输出过...因此在 JS 行为这个层面,模板渲染胜出 模板渲染的步骤 2,和虚拟 DOM 的步骤 3 都属于 DOM 范畴的行为,两者具备可比性,因此我们仍然可以愉快地对比下去:模板渲染是全量更新,而虚拟 DOM...更新的工作量基本一致,而虚拟 DOM 却伴随着开销更大的 JS 计算,此时会出现的一种现象就是模板渲染和虚拟 DOM 在整体性能上难分伯仲:若两者最终计算出的 DOM 更新内容完全一致,那么虚拟 DOM...因为在谈论优势时一定要讨论它的边界 虚拟 DOM 一定比真实的 DOM 操作性能更高吗?其实不是,如果只修改一个按钮的文案,那么虚拟 DOM 的操作无论如何都不可能比真实的 DOM 操作更快。

    15110

    借助 AngularJS 写优雅的代码

    接触 AngularJS 还真有点碰巧,在用 JQuery 写数据绑定的时候,我被数据对象和 DOM 之间的同步整烦了,要写一大堆方法绑定和取值/设值的代码逻辑,丑得要死。...简单说来,就是: 数据对象发生变更以后,要及时更新 DOM 树; 用户操作改变 DOM 树以后,要回头更新数据对象。...="sally" /> sally 1、queryObj 发生变化的时候,这两个 DOM 对象要及时更新,一个是 value 需要更新,一个则是标签里面的文本需要更新。...鉴于这不是 AngularJS 的教程。在此我假设你有 AngularJS 的基础知识,否则,建议你先阅读 AngularJS 简单易懂的教程。...就我而言,我倾向于把同一模块的代码放置在一起,增加可理解性,而不在乎它的组成是 DOM 声明还是 JavaScript 解释。

    2.8K20

    书写高质量jQuery代码的6条经验

    一、正确引用jQuery 尽量在body结束前才引入jQuery,而不是在head中。 借助第三方提供的CDN来引入jQuery,同时注意当使用第三方CDN出现问题时,要引入本地的jQuery文件。...二、优化jQuery选择器 高效正确的使用jQuery选择器是熟练使用jQuery的基础,而掌握jQuery选择器需要一定的时间积累,我们开始学习jQuery时就应该注意选择器的使用。...因为ID选择器和元素选择器是原生的JavaScript操作,而类选择器不是,大家顺便可以看下find context 区别,find() children区别。...时,它将遍历整个DOM,jQuery方法还具有一个未充分利用的参数,既可以将一个上下文参数传入jQuery,以限制它只搜索DOM中特定的一部分。...自从jQuery 1.7版本后,on() 附加事件处理程序的首选方法。

    1.3K90

    jQuery 快速入门教程

    注意:既然获得的是jQuery对象,你就只能使用 jQuery对象的方法,而不能在jQuery对象上调用DOM元素(Element对象)自身的方法(比如 getElementById()),除非你已经通过某些方式将它转换成了...; 如何选择jQuery版本 自jQuery 1.0 发布以来,已经过多次更新,其中增加了许多新的属性和方法,同时也移除了少数过时的属性和方法。目前最新的 1.x 版本为 1.11.1。...上面我们提到的所有选取元素的方法,返回的并不是DOM元素(Element对象),而是jQuery对象,只是其中封装了所有DOM元素。...接下来我们进行DOM操作,也应该使用jQuery对象的方法,而不是Element对象的方法。当然,jQuery对象也可以转换为DOM元素,后面我们会提到。...// 函数内的this表示触发事件的当前DOM元素(不是jQuery对象) // 如果函数的返回值为false,可以阻止事件冒泡和元素的默认事件行为。

    13.7K30

    Github 移除 JQuery 的过程

    实现CSS类名切换; CSS现在支持在样式表而不是JavaScript中定义可视化动画; $.ajax请求可以使用Fetch标准执行; addEventListener()接口足够稳定,可以跨平台使用;...另外,如果我们更新了页面标记,并且意外地漏掉了js小部件的类名,浏览器中的异常是否会通知我们出了问题?...默认情况下,当没有匹配初始选择器时,jQuery会自动跳过整个expresion;但对我们来说,这种行为是一个bug,而不是一个特性。...我们之所以选择Flow而不是alternatives,是因为当时@Flow弱模式等特性允许我们逐步高效地开始将类型应用到基本上没有类型的代码基。...相反,我们: 设置指标,跟踪每行代码使用jQuery调用的比率,并随时间监视该图,以确保它要么保持不变,要么下降,而不是上升。 我们不鼓励在任何新代码中导入jQuery。

    2.1K10
    领券