- 博客(92)
- 资源 (3)
- 收藏
- 关注
原创 杂七杂八的兼容性测试(一)
1,前导空白IE6,IE7,IE8的innerHTML时不会保留前导空白var div = document.createElement('div'); div.innerHTML = " "; return div.firstChild.nodeType === 3; }2,tbodyIE6,IE
2014-10-06 11:07:29
1217
原创 ECMAScript5新增数组API的一些细节
ECMAScript5新增的数组方法看似都比较简单其实还是有一些细节需要了解的首先这些方法都不会作用于原数组,其实对稀松数组的处理上.(1)这些方法在稀松数组缺少的元素上都不会执行回调函数(2)map的返回值包括稀松数组缺少的元素,而filter方法会过滤掉稀松数组的缺少元素,从而返回的都是一个紧凑的数组在一些不支持这些方法的游览器中我们是如何实现这些方法呢首先
2014-09-21 23:44:46
1342
原创 JSONP简单例子
jsonp的原理很简单,主要利用了HTML中所有有src的属性的标签可以跨域的特点,利用script的src进行get请求,后端输出一段js代码的字符串在script中便会执行。当然后端输出普通的json字符串是不行的,后台应当输出fn(json)样式的字符串 ,f var
2014-09-21 10:39:17
2416
原创 一个通用onReady函数的实现
修正一个重大bug,ready函数是不能在AMD中定义从而异步加载的,因为DOMContentLoaded监听的触发时机是在DOM和JS.CSS加载执行完毕后,但有一个例外就是JS如果是动态加载进来的,DOMContentLoaded不会等待这个异步加载的js,所以如果将绑定DOMContentLoaded事件的函数写在动态加载的js中,有一个可能就是Dom已经加载完毕但动态加载的js中的为DOMContentLoaded绑定监听的代码还没有执行,所以很有可能你为DOMContentLoaded绑定的监听不
2014-08-28 23:55:35
5427
原创 兼容性记录-class属性
getAttribute获得class属性时,IE6,IE7的传参是className,IE7+和现代游览器都是class所有游览器DOMElement均有的className属性,其在IE各版本下的均表现良好返回属性class值的字符串此外html5中DOMElement有个classList属性,它返回一个类型为DOMTokenList的对象,它其中有很多有用操作class的方法.
2014-08-26 17:26:05
1516
原创 JavaScript AMD规范简介(一)
AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义".AMD定义了我们所用的模块都是是异步加载的,所以我们要将依赖模块的代码片段要放在一个回调函数中,当异步加载模块完毕后(也就是此模块已可用时)触发回调函数常用的AMD库有require.js、sea.js点击这里这里有一个我自己的示例级别的AMD实现AMD标准中定义了以下
2014-08-26 14:55:41
8349
1
原创 javascript取反再取反的作用
在javascript中按位取反再取反可以将一个浮点数的转化为整形,而且其效率要比parseInt高出将近一倍var start = new Date().getTime(); for (var i = 0; i < 10000000; i++) { var a = Math.random() * 5; ~~a; } console.info(new Date().getTime
2014-08-25 22:56:46
2754
原创 如何用javascript获取UUID
由于javascript是单线程的东西,所以我们放一个累加变量作为id也不会重复.但其实javascript本身提供了可以获得唯一id的东东.还记得setTimeout()方法会返回一个唯一id用来后来清除定时器,我们不妨就借用这个id吧.function getUUID() { var id = setTimeout('0'); clearTimeout(
2014-08-19 22:28:48
9196
原创 isXML
Document对象的createElement(tagName)方法在HTML文档中不区分大小写,在XML文档中区分大小写.所以可以写一下函数来判断文档是不是XML文件function isXML() { document.createElement('p').tagName !== 'P';}
2014-08-18 23:04:22
946
原创 开坑!JavaScript AMD模块的设计与实现
开个坑,慢慢学习总结JavaScript的AMD规范先把自己写的一个简易实现放上来,然后慢慢从0开始讲解一下AMD,已经如何自己动手实现一个AMD/*AMD*/var DOC = window.document;var head = DOC.head || DOC.getElementsByTagName('head')[0];var basePath = getCurrentScr
2014-08-17 23:10:58
1430
原创 nodeValue的兼容问题
nodeValue获取Text或Comment元素的文本值.在IE6、IE7、IE8中游览器会自作聪明的去掉前面的空白字符text,而其他现代游览器则会保留空白 span 12345 678 var text = document.getElementsByTagName('p')[0].firstChild.nodeValue; alert(text.length)
2014-08-06 23:42:51
1314
原创 JQuery日记6.9 Promise/A之Callbacks
JQuery并没有简单的使用一个Array来存储回调函数,而是通过JQuery.Callbacks(options)返回一个self对象,此对象可以动态的add,remove和fire回调函数队列.此函数需要说明的是options参数,它是一个string,这个string由四个参数任意组合而成options:once:回调函数只执行一次memory:调用add时触发回调函数使用fir
2014-06-09 18:37:59
1202
原创 JQuery日记6.7 Javascript异步模型(二)
异步模型看起来很美,但其实它也是有天生缺陷的.看下面代码try { setTimeout( function(){ throw new Error( '你抓不到我的!' ); }, 100);} catch (e) { console.error(e);}如果你已经理解了上一篇博客,那你一定了解了这样的写法是捕
2014-06-06 20:59:58
993
原创 JQuery日记6.5 Javascript异步模型(一)
在了解JQuery的异步队列实现之前,有必要去了解javascript的异步模型.Javascript的异步其实并不算严格意义上的异步,js的异步是指让某段代码片段在将来再执行,而不是让执行流不必等待继续向下进行.在多线程的语言中最容易想到的异步方式就是在当前线程中,新创建一个线程让某段代码片段运行在新创建的线程中,从而使当前线程继续向下进行.而任何一本书关于js的书都会告诉我们js是
2014-06-05 17:32:31
1063
原创 JQuery日记 6.3 JQuery遍历模块
jQuery.extend({ // 返回elem延DOM树某个方向访问的所有节点,直到遇到until条件 dir: function( elem, dir, until ) { var matched = [], truncate = until !== undefined; while ( (elem = elem[ dir ]) && elem.nodeType !==
2014-06-03 10:23:46
1472
原创 JQuery日记 5.31 JQuery对象的生成
JQuery对象的生成的逻辑如下1 selector为任何可转换false的空值 返回空JQuery对象2 selector为字符串 2.1 selector为html字符串或有id属性的标签 2.2.1 selector为html字符时 转换html字符为DOM元素并放入当前JQuery的数组 当context
2014-05-31 13:18:37
2074
1
原创 JQuery日记_5.20 JQuery对Sizzle选择器的扩展
代码很简单直接上源码function winnow( elements, qualifier, not ) { //如果qualifier是函数 if ( jQuery.isFunction( qualifier ) ) { //not为true时,返回qualifier返回false的elements //not为false时,返回qualifier返回true的elements
2014-05-20 17:53:44
1048
原创 Canavs arcTo方法的理解
arcTo方法有四个参数参数1,2为第一个控制点的x,y坐标,参数2为第二个控制点的坐标,参数3为绘制圆弧的半径.起点和第一个控制点组成的延长线与第一个控制点和第二个控制点组成的延长线都是和圆弧相切的,这个圆弧也就是被夹在两条延长线中间.圆越大,两条延长线能形成的角度能夹住的圆弧就越小.下面写了一个简单的动画帮助理解Insert title herecanvas
2014-05-17 17:41:26
2875
原创 JQuery日记_5.14 Sizzle选择器(七)
上篇说道,tokenize方法会把selector分割成一个个selector逻辑单元(如div a是两个逻辑单元)并为之片段赋予对应类型的过滤函数。for ( type in Expr.filter ) { if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
2014-05-16 18:49:55
1355
1
原创 JQuery日记_5.13 Sizzle选择器(六)选择器的效率
当选择表达式不符合快速匹配(id,tag,class)和原生QSA不可用或返回错误时,将调用select(selector, context, results, seed)方法,此方法迭代DOM选择、过滤元素,在DOM树非常大的时候为了保证效率,应该保证html设计的合理,尽量使用可快速匹配(id,tag,class)的表达式,其次是QSA支持的选择器,尽量不要使用jquery扩展的selec
2014-05-13 13:26:15
970
原创 JQuery日记 5.11 Sizzle选择器(五)
setDocument = Sizzle.setDocument = function( node ) { var hasCompare, //node为Element时返回node所属document //node为Document时返回node //node为空时返回window.document doc = node ? node.ownerDocument || node
2014-05-11 11:27:58
2083
原创 JS的继承和接口
此工具函数没实际意义,只是鉴于EXT的extend方法不太好理解,写了一个简化的extend方法,帮助理解./** * */E = {};E.extend = function(sub, sup) { //借用构造函数 sub.prototype = sup; //保留父类的构造函数,以便在子类构造函数中用调用,将父类变量绑定在this下 sub.prototype.supe
2014-05-09 20:50:35
2895
转载 unicode、GBK、UTF-8
unicode是一种“编码”,所谓编码就是一个编号(数字)到字符的一种映射关系,就仅仅是一种一对一的映射而已,可以理解成一个很大的对应表格GBK、UTF-8是一种“编码格式”,是用来序列化或存储1中提到的那个“编号(数字)”的一种“格式”;GBK和UTF-8都是用来序列化或存储unicode编码的数据的,但是分别是2种不同的格式; 他们俩除了格式不一样之外,他们所关心的unicode编码范围也不一
2014-05-09 11:46:22
936
原创 JQuery_2.1.0_日记 5.8 Sizzle选择器(四)
Sizzle( selector, context, results, seed )的关键步骤1,传入的context对应的context和当前document是否一致,不一致调用setDocument()重新设置document,用于frame的情况.2,如果context为空修正context为document3,selector如果不是字符串或者context不是Element或
2014-05-08 19:07:28
929
原创 JQuery_2.1.0_日记 5.5 Sizzle选择器(三)
function Sizzle( selector, context, results, seed ) { var match, elem, m, nodeType, // QSA vars i, groups, old, nid, newContext, newSelector;
2014-05-05 12:53:21
1179
原创 JQuery_2.1.0_日记 5.4 Sizzle选择器(二)
(1)whitespace = "[\\x20\\t\\r\\n\\f]";匹配css3中空白符.\x20:空格;\t水平制表符(tab);\r\n回车换行\f换页符(2)characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+"匹配\后任意字符,字母或数字或-,ascii值非\00-\xa0范围内的字符(3)i
2014-05-04 20:25:10
1425
原创 JQuery_2.1.0_日记 5.4 Sizzle选择器(一) 正则中那些\\\\和\\
Sizzle中恐怖的正则.字面量的正则也许还好理解,那么由字符串编译而成的正则呢.\\和\\\\由字符'\\\\'编译而成的正则是/\\/,第一个\转义第两个\,所以其匹配一个\字符(这个\字符是代表字符本身)Test_Scriptvar s = '\\' ;alert(s); // '\'var rs = '\\\\' ;var m
2014-05-04 17:21:41
1073
原创 JQuery_2.1.0_日记 5.2
$.方法(1)$.merge(first, second) 合并两个数组或类数组,将第二个数组添加到第一个数组的末尾(2)$.grep(elems, callback, invert) 使用callback对elems进行过滤,如果invert设置为true.则返回保留callback返回值为false的元素数组,如果invert设置为false则返回c
2014-05-02 20:23:11
1198
原创 JQuery_2.1.0_日记 5.1
JQuery工具方法.(1)$.isNumeric(obj) 此方法判断传入的对象是否是一个数字或者可以转换为数字. isNumeric: function( obj ) { // parseFloat NaNs numeric-cast false positives (null|true|false|"") // ...bu
2014-05-01 20:35:11
1016
原创 JQuery_2.1.0_日记 4.29 $.extend
因为在JQuery一切皆JQuery,所以JQuery没有EXT那么恐怖的继承体系,比起EXT的Ext.extends(),$.extend()函数还是很好理解的,只是把一个对象的属性和方法添加到目标对象上.刚出生的JQuery是很弱小的,JQuery源码后面和我们自己扩展都是通过$.extend()函数. Test_Html body> di
2014-04-29 17:33:41
1566
原创 JQuery日记 2014-04.29
JQuery原型对象(续)(4).each(callback,args)迭代JQuery对象上的元素并调用callback参数,如果某次迭代中callback返回false,停止迭代.args为callback的参数,args必须为数组.在callback中this引用的当前迭代的元素.Test_HTMLbody>div id= "div1">div1div >
2014-04-29 10:50:26
873
原创 JQuery日记 2014-4.28
为方便起见将JQuery.fn.init称之为JQuery对象JQuery原型对象方法:(1) toArray() 调用[].prototype.slice.call(jquery)将JQuery对象(类对象)转换为真正的数组 测试html body> div id= "div1">div1div >div id= "div2">div2
2014-04-28 18:24:06
940
原创 jquery easyui tree实现延迟
这例子是官方的demo。可帮助我们理解tree延迟加载的原理,其中涉及到树的基本遍历算法。function myLoadFilter(data, parent){ var state = $.data(this, 'tree'); function setData(){ var serno = 1; var todo = [];
2014-01-15 11:36:23
4139
原创 一种不好的删除XML空白节点和注释节点的方法
public static void deleteNoteAndBlank(Node node) {if (node.getNodeType() == TEXT_TYPE || node.getNodeType() == NOTE_TYPE) {return;}ArrayList deleteNodes = new ArrayList();for (int i = 0; i
2013-12-30 15:40:40
3123
原创 金额转换为中文大写格式
package org.sz.basic;import java.text.DecimalFormat;public class ConvertMoney { private final static String[] STR_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; private final
2013-12-22 22:48:45
2037
原创 java随手记(1)
1 简单加密、解密 位运算 String password = scanner.nextLine(); char[] array = password.toCharArray(); for (int i = 0; i length; i++) { array[i] = ( char)(array[i] ^ 20000);
2013-12-20 09:21:32
697
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人