首页
学习
活动
专区
圈层
工具
发布

JavaScript面试问题:事件委托和this

浏览器会向下遍历DOM树直到找到触发事件的元素,一旦浏览器找到该元素,事件流就进入事件目标阶段,该阶段完成后,浏览器会沿DOM树向上冒泡直到最顶层容器,看看是否有其它元素需要使用同一个事件。...发布/订阅模型从一个元素发送消息后并向上遍历,有时也向下遍历,DOM会通知遍历路径上的所有元素事件发生了。在下面的示例中,JQuery通过trigger方法传递事件。...元素绑定的每一个监听器都会占用一些内存,如果页面上只有少数几个监听器,我们也不会注意到它们之间的区别,然后,如果要监听一个50行5列的表格中的每个单元格,你的Web应用会开始变慢,为了使应用程序最快运行的最好方式是保持尽可能低的内存使用...元素操作在单页应用中是极其常见的,为某部分添加一个按钮这样简单的事情也会为应用程序创建一个潜在的性能块,没有合适的事件委托,就必须手动为每一个按钮添加监听,如果每个侦听器不清理干净,它可能会导致内存泄漏...浏览器不会清理页面,因此在单页应用中,所有从内存中清理不当的碎片都会留在内存中,这些碎片会降低程序性能。 当在页面中添加交互时,仔细考虑一下,是否真的需要去监听元素。

1.8K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    前端开发面试题答案(四)

    的扩展,就是为jquery类添加成员函数 使用: jquery.extend扩展,需要通过jquery类来调用,而jquery.fn.extend扩展,所有jquery实例都可以直接调用。...*基于Class的选择性的性能相对于Id选择器开销很大,因为需遍历所有DOM元素。 *频繁操作的DOM,先缓存起来再操作。用Jquery的链式调用更好。...jquery stop(): 如:$("#div").stop().animate({width:"100px"},100); 42、那些操作会造成内存泄漏?...内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。 垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。...如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。 setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。

    3.1K20

    jQuery动画与ajax

    在这种情况下,jQuery对象本身被默认为目标对象。这样,我们可以在jQuery的命名空间下添加新的功能。这对于插件开发者希望向 jQuery 中添加新函数时是很有用的。...由于jQuery 对象上的方法最后会返回该对象,jQuery的链式调用就是可以在对象返回后再次调用该对象使用jQuery方法的一种操作。...该方法允许我们在DOM元素上绑定任意类型的数据,避免了循环引用的内存泄漏风险。 用法1:在匹配元素上存储任意相关数据。...Paste_Image.png 7:用jQuery方法实现一些功能 1.给元素 $node 添加 class active,给元素 $noed 删除 class active $node.addClass...$node $ct.prepend($node) 6.在$ct 内部最末尾添加元素$node $ct.append($node) 7.删除$node $ndoe.remove() 8.把$ct里内容清空

    3.7K30

    如何解决内存泄漏引发的血案

    依次循环,但是跑的时间久了,内存就变得很高,然后浏览器就会变卡,慢慢的影响这个插件的运行,最后浏览器也会崩溃。 什么是内存泄漏 内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。...内存泄漏的几种情况 1、Delete 一个 Object 的属性会让此对象变慢 var obj = {x: 'y'}; delete obj; // 此时 obj 会成一个慢对象 obj.x; var...泄漏 当原有的 DOM 被移除时,子节点引用没有被移除则无法回收 当页面中元素被移除或替换时,若元素绑定的事件仍没被移除,在 IE 中不会作出恰当处理,此时要先手工移除事件,不然会存在内存泄漏。...的 html() 函数 页面中还需要注意的一点是使用 jquery 的 html() 函数,该函数不是基于 innerHTML 实现的,大量使用同样也会导致系统性能下降。...6、使用事件委托代替事件注册 页面中如果元素过多,且需要为每个元素注册相同的 click 事件,这个时候我们优先考虑到使用委托机制,将需要注册的 click 事件注册到元素的上层或者顶层元素,这样我们就节省了大量的

    75610

    DMO节点内部插入的常用方法与区别

    1.DOM内部插入append()与appendTo() 动态创建的元素是不够的,它只是临时存放在内存中,最终我们需要放到页面文档并呈现出来。那么问题来了,怎么放到文档上?...与appendTo添加元素 点击通过jQuery的append添加元素 点击通过jQuery...appendTo()前面是要插入的元素内容,而后面是被插入的对象 2.DOM内部插入prepend()与prependTo() 在元素内部进行操作的方法,除了在被选元素的结尾(仍然在内部)通过append...的使用及区别: .prepend()方法将指定元素插入到匹配元素里面作为它的第一个子元素 (如果要作为最后一个子元素插入用.append()). .prepend()和.prependTo()实现同样的功能... 点击通过jQuery的prepend添加元素 点击通过jQuery的prependTo添加元素

    1.5K00

    JQuery

    对象 dom对象和JQuery对象 dom对象:原生js选择器获取到的对象 只能调用dom方法或者属性,不能调用JQuery的属性或者方法 JQuery对象:利用JQuery选择器获取到的对象 只能调用...div1是一个dom对象 $(div1); JQuery对象转换成dom对象 // 直接使用下标取出来 $divs[0]; // 使用JQuery的get()方法 $divs.get(0); 获取和设置...mouseover mouseover事件在鼠标移动到选取的元素及其子元素上时触发 mouseseenter mouseseenter事件只在鼠标移动到选取的元素上时触发 类操作 // 添加类 addClass...() // 判断类,判断元素是否有这个类,返回true或者false hasClass(类名) // 切换类,元素有这个类则删除,没有则添加 toggleClass(类名) 节点操作 使用html()和...$() // 无参数,获取到元素的所有内容 html() // 有参数,可以覆盖原有的内容 html("") // html()可以解析标签 // 使用$()函数创建元素,但是创建的元素只在内存中,如果要在页面上显示

    51560

    求职 | 史上最全的web前端面试题汇总及答案2

    join:使用指定间隔符连接所有元素为字符串 push:在尾部添加元素并维护array实例的length splice与slice都是截取一部分元素。...,过多的使用闭包会导致内存溢出等。...调用append方法,将新节点作为参数。 6、ajax、get、post、ajaxSetup、getJSON各有何用途? ①ajax:jQuery对ajax执行的核心方法。...4、哪些常见操作会造成内存泄漏? ①内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。 ②垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。...如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。 ③setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。

    8.3K20

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

    方法2,为要查找的元素添加了上下文,在这里变为查找id为nav的子元素,查找性能得到了很大提升。 方法3,使用了find方法,它的速度更快,所以方法三最好。...到目前为止,无论使用哪一种浏览器,使用ID选择器和当个类选择器都是选中元素最快的方式。 2.2、避免多个ID选择符 Id选择符应该是唯一的,所以没有必要添加额外的选择符。...//糟糕,会遍历整个DOM $(".class"); //建议,只搜索#id元素 $(".class","#id"); jQuery选择器的性能比较: $(".class","#id") > $("#id...操作 刚开始使用jQuery时可能会频繁的操作DOM,这是相当耗费性能的。...7.1、繁重的操作中分离元素 如果你打算对DOM元素做大量操作(连续设置多个属性或css样式),建议首先分离元素然后在添加。

    1.5K40

    JQuery干货篇之操控DOM

    使用DOM API创建新元素 1.5. append 1.6. prepend 1.7. appendTo 1.8. prependTo 1.9. after 1.10. before 1.11. insertBefore...作者说 JQuery干货篇之插入元素 本次使用的html,css还是我上一篇的源代码,详情请看上一篇文章 分类 插入子元素:append,prepend ,appendTo,prependTo 封装包裹元素...:remove,deatch,unwrap,empty 创建新元素 通常在把新元素插入到DOM中的目标位置之前,要先创建一个新元素才能将它插入到指定位置 使用$创建元素 $(使用clone方法,那么就会将这段内容移动,因此这里使用clone会很方便,详细请看append的用法实例 实例: 1 $("div.dcell").clone(); //这里的clone...方法必须是JQuery对象调用 使用DOM API创建新元素 DOM API是用js操作的,其实jquery在幕后悄悄的调用DOM API 实例: var divElem=document.createElement

    1.4K10

    前端面试宝典 v1

    使用 DocumentFragment 优化多次 append 通过模板元素 clone ,替代 createElement 使用一次 innerHTML 赋值代替构建 dom 元素 使用 firstChild...setInterval 50、那些操作会造成内存泄漏?...如果想删除数组中的一段元素,应该使用方法 Array.splice() splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。返回的是含有被删除的元素的数组。...那些操作会造成内存泄漏? 内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。 垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。...如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。 setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。

    3.1K41

    Web前端-JavaScript基础教程上

    页面性能优化:压缩,合并,减少请求,diam层析优化 内存泄漏的原因有:内存泄漏是任何对象在不使用时它还存在,导致内存泄漏为setTimeout,闭包,控制台日志,循环等。...优化,优先使用id选择器,jquery如果要使用dom元素,就建议存储一个变量保存使用,使用dom操作的过程非常耗性能。...class前使用tag。 jquery操作dom的框架,jqueryui是基于jquery做的一个ui组件库。...slice()可以从已有的数组返回选定的元素。 splice()从数据中添加或删除,返回被删除的部分数组。 ? 效果 闭包读取函数内部的变量值,并保持在内存中。.../ post数组 dataType: "json", type: "POST", success: function(data){ }, error: function(){ } }); 内存泄漏

    2.6K30

    25个常规方法优化你的jquery代码

    DOM的插入操作(像.append(),.prepend(),.after(),.wrap())是相当耗时的,执行这些操作会拖慢程序的运行。...尽可能使用ID而不是class jQuery利用classes进行DOM元素选择操作与通过ID进行选择一样容易,因此与之前相比更自由的使用classes进行元素选择操作很有吸引力。...你也可以下载插件帮助你给非数字值的属性添加动画效果,像colors and background colors 12. 了解事件代理与之前相比,jQuery能够更容易得向DOM元素无缝添加事件。...当使用事件代理时,你能够在事件被DOM绑定后仍然可以添加多个被匹配的元素到其中,而它们同样能够正常工作。 13. 利用classes存储状态 这是在html中存储信息最基本的方法。...如何检查元素是否存在你不必检查元素是否在页面上存在就可以使用它,因为如果没有在DOM中找到合适的元素,jQuery什么也不会做。

    2.3K10

    jQuery创建html元素【jQuery框架应用入门08】

    jQuery创建一个html元素,将html标签的字符串放入$()中就可创建一个DOM节点,接下去将DOM节点通过appendTo方法添加到指定的某个DOM中即可。...或者是通过先找到某个添加html元素的DOM节点,然后使用append方法添加DOM节点或者html字符串即可实现元素的创建并添加,。 现在为我的歌曲榜榜单再添加一首或几首歌。...然后利用jQuery的append方法添加一首歌,使用代码: $("ol").append("水手") 或者 $("水手").appendTo($("ol")) 或者...图5-8 添加一首歌曲 通过此案例读者进一步见证,创建一个html元素把它添加到指定的节点元素中,可以是字符串类型也可以是DOM节点类型。...如果你想把元素添加到开头,那么使用prepend方法即可,用法与append类似。

    62510

    JQuery中的Dom操作集合

    但是我们很多编码过程中,如果没使用mvvm或者不适应mvvm的人,那么就属JQuery使用的最广泛了。 其中,又数ajax和Dom操作中的append 最为常用。...html方法,给元素添加html代码或者清空html代码(参数为空字符串); append向元素的末尾添加html代码; appendTo这个方法跟append方法的很像,只是要添加的html代码的目标有所不一样...; after向元素的后边添加html代码,如果元素后面有元素了,那将后面的元素后移,然后将html代码插入; before向元素的前边添加html代码,如果元素前面有元素了,那将前面的元素前移,然后将...,如果元素前面有元素了,那将前面的元素前移,然后将JQuery对象插入; empty清空元素内部的html代码,它只是清空内部的html代码,但是标记仍然留在DOM中; remove从DOM中移除整个元素...因为要在某个元素前面添加一个用来显示errorbox 所以,而这个元素不是最后面的,因此只能用这个方法,而只会append的我当时一脸懵逼,索性,想到其他的语言都有insert,没理由JQuery这个框架没有这个方法

    76930

    jQuery中find&filter、live&bind对比介绍及图片懒加载

    live方法之所以能对后生成的元素也绑定相应的事件的原因归结在"事件委托"上面,所谓"事件委托"就是指绑定在祖先元素上的事件可以在其后代元素上进行使用。...live方法的处理机制就是把事件绑定在DOM树的根节点上,而不是直接绑定在某个元素上。...相比之下,bind会在事件在绑定阶段就会判断绑定事件的元素是否存在,而且只针对当前元素进行绑定,而不是绑定到父节点上。 根据上面的分析,live的好处真是很强大,那么为什么还要使用bind方法呢?...另外,在jQuery 1.4.1中,也能支持hover(映射到"mouseenter、mouseleave")。 2. live() 并不完全支持通过DOM遍历的方法找到的元素。...当所有的图片都加载完之后,将相应的触发事件卸载,避免重复操作引起的内存泄漏。将整个窗口看成是一个大容器,那么也可以在页面中设置一个小容器,在小容器中也同样可以实现图片的延迟加载。

    1K31
    领券