上一页 1 2 3 4 5 6 7 8 9 10 ··· 22 下一页
摘要: js的同步、异步和延迟1、默认情况下,js是同步和阻塞DOM解析的。在解析DOM的过程中,当遇到script时,会暂停DOM解析,开始请求script并执行js,执行完成之后再接着解析DOM树。2、之前一直不知道DOMReady是在什么时候,也从来没在书上看到对这个时间点的解释。现在感觉,DOMReady是解析完body的结束标签之后。所以所有的js的应该绑定在body标签之前。否则其中的DOMReady所触发的回调可能无法执行。3、想要js不阻塞DOM解析的方法有: 将js写在body的结束标签之前,其它所有的html之后 为script添加defer和async属性。添加了这两个属性是.. 阅读全文
posted @ 2014-01-22 09:38 charling 阅读(1990) 评论(0) 推荐(1) 编辑
摘要: Element对象有以下重要属性:1、style。 a)Element的css样式 b) 可以通过elem.style.backgroundColor = "red"的形式才动态的修改css样式2、className。 elem.className = "highlight"; // 修改elem的classHTML文档中嵌入js的四种方法:1、内联,js内容放到script标签中间2、由scirpt标签的src属性引入 // 最常用的方式,也是最推荐的一种3、通过html的onclick、onmouseover这样的属性指定// 取消元素的默认行为时常 阅读全文
posted @ 2014-01-20 22:01 charling 阅读(9348) 评论(0) 推荐(0) 编辑
摘要: 通过这几天对Sizzle源码的阅读,发现想要读懂Sizzle,需要良好的原生js基础。否则基本没有可能了解其中的很多处理的含义。基于对业务是否有帮助的考虑,想要放弃Sizzle的阅读,开始阅读jQuery UI的源码。但通过阅读发现,jQuery UI的源码是在jQuery的基础上进行的。很多功能都是需要基于jQuery代码来扩展的。所以如果jQuery源码没有理解好,就去阅读jQuery UI的源码的话,将会事倍功半。因此,通过这几天的考虑,还是决定从基础的基础开始入手:补充原生js的知识。学习计划:两个月内了解原生js所提供的api。1、准备资料。两天(原生js书籍)1、基础部分。由于业务 阅读全文
posted @ 2014-01-12 18:02 charling 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 在Sizzle的入口方法Sizzle()中看到的一个根据浏览器来初始化document各个方法的函数setDocument(),接下来主要看一下这个方法都做了什么。但之前有必要看一下它用到的一些Sizzle内部使用的方法:// 通过创建一个div元素,检测被传入的fn是否被当前浏览器支持function assert( fn ) { var div = document.createElement("div"); //此处用try-catch的原因是:被传入的fn很有可能是会报错的。因为fn中用的方法或属性很可能不被当前浏览器所支持。 try { // 尝试执行被传入的方. 阅读全文
posted @ 2014-01-06 21:54 charling 阅读(1266) 评论(1) 推荐(0) 编辑
摘要: 自己开始尝试读Sizzle源码。1、Sizzle同过自执行函数的方式为自己创建了一个独立的作用域,它可以不依赖于jQuery的大环境而独立存在。因此它可以被应用到其它js库中。实现如下:(function(window, undefined){})(window, undefined);2、Sizzle中最头疼的就是一大片的复杂正则表达式: // 为正则准备的字符串。匹配选择器中的布尔值,例如 $( "input:checked" ); booleans = "checked|selected|async|autofocus|autoplay|controls|d 阅读全文
posted @ 2014-01-05 15:34 charling 阅读(1515) 评论(0) 推荐(0) 编辑
摘要: 今天还是主要看别人对Sizzle的分析。1、Sizzle拿到css选择器,通过tokenize方法,将选择器转化成一个数组,数组内部使用下面格式的对象存储分解后的选择器 { "type" : "CLASS", "value" : ".red", "matchs" : " " }2、开始从右向左,也就是从第一步生成的数组的最后开始扫描。由于性能的需要,Sizzle优先使用浏览器自带的api: getElementById,getElementsByName,getElement 阅读全文
posted @ 2014-01-02 23:49 charling 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 1、浏览器对css选择器采取逆向(从右向左)解析的原因: 如果正向解析,例如「div div p em」,我们首先就要检查当前元素到 html 的整条路径,找到最上层的div,再往下找,如果遇到不匹配就必须回到最上层那个 div,往下再去匹配选择器中的第一个 div,回溯若干次才能确定匹配与否,效率很低。 逆向匹配则不同,如果当前的 DOM 元素是 div,而不是 selector 最后的 em,那只要一步就能排除。只有在匹配时,才会不断向上找父节点进行验证。找到所有的em之后,再通过查找他的父元素是不是p来进行过滤。2、Sizzle如果分解用户传入的css选择器字符串以”div > d 阅读全文
posted @ 2014-01-01 23:14 charling 阅读(614) 评论(0) 推荐(1) 编辑
摘要: 通过阅读jQuery为属性操作封装的基本方法和为处理兼容性问题提供的hooks,发现jQuery在属性操作方面并没有做过多的设计,只是处理一下兼容性问题,然后调用基础的DOM操作方法。以下是对JQuery提供的基础方法的阅读:jQuery.fn.extend({ // 调用access方法进行参数整理之后调用$.attr方法 attr: function( name, value ) { return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); }, // 遍历jQuery对象中的所有元素, 阅读全文
posted @ 2013-12-30 22:10 charling 阅读(1639) 评论(0) 推荐(0) 编辑
摘要: 在阅读attr、remove方法时,看到一些对浏览器兼容性做处理的hooks。接下来看一下这些hooks都做了哪些兼容性处理1、attrHooks。主要处理IE6-9 input的type属性无法写入的问题。 attrHooks: { type: { set: function( elem, value ) { // 如果value是radio,并且elem是input if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "in. 阅读全文
posted @ 2013-12-29 16:22 charling 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 挂载到$上的几个属性操作方法分析,发现属性操作用到了sizzle封装的方法attr: function( elem, name, value ) { var hooks, ret, nType = elem.nodeType; // 如果elem不存在,或者是文本节点、注释或者是属性节点,直接返回。 if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { return; } // 当不支持getAtrribute方法时(估计是处理浏览器兼容问题) if ( typeof elem.getAttribute ==... 阅读全文
posted @ 2013-12-26 22:02 charling 阅读(339) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 22 下一页