-
每次在body上点击其实都会触发事件,但是只目标为p元素的情况下才会触发回调的处理函数。通过源码不难发现on方法实质只完成一些参数调整的工作,而实际负责事件绑定的是其内部 jQuery.event.add方法查看全部
-
test查看全部
-
用来绑定一个事件: var body = $('body') body.on('click','p',function(){ console.log(this) }) 用 on 方法给 body 上绑定一个 click 事件,冒泡到 p 元素的时候才出发回调函数,这里大家需要明确一点: 每次在body上点击其实都会触发事件,但是只目标为p元素的情况下才会触发回调的处理函数。通过源码不难发现on方法实质只完成一些参数调整的工作,而实际负责事件绑定的是其内部 jQuery.event.add方法查看全部
-
1. 可以在一个事件类型上添加多个事件处理函数,可以一次添加多个事件类型的事件处理函数 2. 提供了常用事件的便捷方法 3. 支持自定义事件 4. 扩展了组合事件 5. 提供了统一的事件封装、绑定、执行、销毁机制查看全部
-
jQuery 遍历,意为“移动”,用于根据其相对于其他元素的关系来“查找”(或选取)HTML 元素。以某项选择开始,并沿着这个选择移动,直到抵达您期望的元素为止。查看全部
-
总结: 在下列情况下,应该使用 .live()或 .delegate(),而不能使用 .bind(): 1. 为DOM中的很多元素绑定相同事件; 2. 为DOM中尚不存在的元素绑定事件; 3. 用.bind()的代价是非常大的,它会把相同的一个事件处理程序hook到所有匹配的DOM元素上 4. 不要再用.live()了,它已经不再被推荐了,而且还有许多问题 5. .delegate()会提供很好的方法来提高效率,同时我们可以添加一事件处理方法到动态添加的元素上 我们可以用 .on() 来代替上述的 3 种方法。 不足点也是有的: 1. 并非所有的事件都能冒泡,如load, change, submit, focus, blur 2. 加大管理复杂 3. 不好模拟用户触发事件 4. 如何取舍就看项目实际中运用了查看全部
-
利用事件传播(这里是冒泡)这个机制,就可以实现事件委托 具体来说,事件委托就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素(document)查看全部
-
事件传送可以分为3个阶段。 (1)在事件捕捉(Capturing)阶段,事件将沿着DOM树向下转送,目标节点的每一个祖先节点,直至目标节点。例如,若用户单击了一个超链接,则该单击事件将从document节点转送到html元素,body元素以及包含该链接的p元素。在此过程中,浏览器都会检测针对该事件的捕捉事件监听器,并且运行这件事件监听器。 (2)在目标(target)阶段,浏览器在查找到已经指定给目标事件的事件监听器之后,就会运行该事件监听器。目标节点就是触发事件的 DOM 节点。例如,如果用户单击一个超链接,那么该链接就是目标节点(此时的目标节点实际上是超链接内的文本节点)。 (3)在冒泡(Bubbling)阶段,事件将沿着DOM树向上转送,再次逐个访问目标元素的祖先节点到document节点。该过程中的每一步。浏览器都将检测那些不是捕捉事件监听器的事件监听器,并执行它们。查看全部
-
DOM2.0 模型将事件处理流程分为三个阶段: 一、事件捕获阶段 二、事件目标阶段 三、事件起泡阶段 事件传送可以分为3个阶段。查看全部
-
这样的代码再正常不过了,但是,如果页面上有几百个元素需要绑定(假设),那么务必就要绑定几百次啦。 这样问题就出现了: 第一:大量的事件绑定,性能消耗,而且还需要解绑(IE会泄漏) 第二:绑定的元素必须要存在 第三: 后期生成HTML会没有事件绑定,需要重新绑定 第四: 语法过于繁杂 有没有办法优化呢?答案是肯定的,那就是采用委托的机制查看全部
-
1.转化样式命名 2.处理特殊的属性比如float 3.分离出一个钩子,用于处理跟尺寸有关的属性 4.其余元素采用getComputedStyle获取对应的值查看全部
-
此时我看可以采用一个CSS hook 可以标准化这些供应商前缀的属性,让 css 接受一个单一的标准的属性的名称(border-radius 或用 DOM 属性的语法 borderRadius)判断的代码省略,直接看实现,给某一元素设置borderRadius 为10px。 $("#element").css("borderRadius", "10px"); 为了做浏览器兼容,我们不得不: if(webkit){ ........................ }else if(firefox){ ........................... }else if(...)更多 这是一种最没技术含量的写法了,如果我们换成一种 hook 的话: $.cssHooks.borderRadius = { get: function( elem, computed, extra ) { return $.css( elem, borderRadius ); }, set: function( elem, value) { elem.style[ borderRadius ] = value; } }; $.cssHooks 对象提供了一种方法通过定义函数来获取和设置特定的CSS值的方法,它也可以被用来创建新的 cssHooks 以标准化 CSS3 功能,如框阴影和渐变。 例如 border-radius 属性,在早起的时候还没有形成标准化浏览器都有各自的实现,比如基于 webkit 的谷歌浏览器就需要写成 webkit-border-radius,Firefox 就需要写成 -moz-border-radius ,所以我们需要一个钩子都判断这个标准实现这个头部的前缀添加。查看全部
-
getComputedStyle与style的区别 区别就在于 getComputedStyle 是只能读的,style是可以可读可写的。 看看jQuery的: elem.ownerDocument.defaultView.getComputedStyle(elem, null); 实际就是: function getStyles( elem ) { return window.getComputedStyle( elem, null ) }查看全部
-
dom查询查看全部
-
width,height在内部最终调用的是jQuery.css(elem, type, extra)方法,jQuery.css是最终的一个针对所有CSS处理的接口,我们放在下一章,这里我们只涉及width与height的获取。 display:none的状态下是无法获取元素的尺寸的,所以jQuery在最开始之前必须要检测下这个状态,这个处理是通过钩子jQuery.cssHooks['widht'].get方法调用的: /^(none|table(?!-c[ea]).+)/test(jQuery.css(elem, "display")) //代码很简单通过判断得到的值 当检测到是none的情况下,就要把display置为block?不行这样就改变了布局的原意了,本来就是隐藏的。jQuery就会对元素增加position: absolute; visibility: hidden;这样的属性达到display:none的效果,因为在visibility: hidden的情况下,是可以获取到值的,只是对于用户不可见而已。 获取元素的尺寸值我们有offsetWidth,与offsetHeight,大多情况下是够用了,但是有一种情况如果元素采用boxSizing处理,所以jQuery还要对BorderBox情况的检测,如果如果是采用了border-box样式的话,针对值的获取还要减去padding,border,这又是一个相当繁琐的过程,我们在之前就提到过这个过程的处理了。查看全部
举报
0/150
提交
取消