* *                         ☆★☆★☆★☆★☆★☆JavaScript草稿集☆★☆★☆★☆★☆★☆ * *                                               By Barret Lee
  ★JQuery★<!--<script type="text/javascript" src="http:code.jquery.com/jquery-latest.js"></script>-->
  ★★★★★★★★公共部分★★★★★★★★     function printf(obj) {         document.write(obj + "<br>");     }
      function $(obj) {         return document.getElementById(obj);     }     function forEach(obj) {         for (m in obj) {             printf(m + ':' + obj[m]);         }     } ★★★★★★★★注释方式★★★★★★★★★     *     *    <!--[CDATA[     *     *    ]]-->
  ★★★★★★★★alertBox★★★★★★★★     function alertBox() {         "use strict";         var coverLayer = document.createElement("div");         var contentLayer = document.createElement("div");         coverLayer.setAttribute("id", "coverLayer");         contentLayer.setAttribute("id", "contentLayer");         contentLayer.innerHTML = "<p>Huazhong University Of Science And Technology</p>";         document.body.appendChild(coverLayer);         document.body.appendChild(contentLayer);     }     window.onload = alertBox;
  ★★★★★★★★基本数据类型★★★★★★★★     var x = parseFloat("20.33");     var y = parseInt("11", 8);     var z = Math.sin(Math.PI / 2);     var s = "this is a string.";     var a = [1, 2, 4, 3];     var o = {first: 1, second: 2, third: 3};     var result = o.valueOf();     printf(result + "<br>");     printf(1 + "2" + "<br>"); 12     printf((a instanceof Array) + "<br>");     printf((a.constructor) + "<br>");     printf(o.hasOwnProperty("first") + "<br>");
  ★★★★★★★★arguments数组★★★★★★★★     function plus(x, y, z) {         "use strict";         if (arguments.length !== 3) {             throw new Error(arguments.callee);         }         return x + y + z;     }     plus(2, 3);     printf(plus(2, 3, 4));     var cal = {         x: 1,         y: 2,         f: function () {             "use strict";             return this.x + this.y;         }     };     printf(cal.f() + "<br>");
  ★★★★★★★★函数call和apply★★★★★★★★         function fCall(x, y) {             return x + y;         }         var res = fCall.call(cal, 1, 2);         var res1 = fCall.apply(cal,[6, 9]);         printf(res + "<br>");         printf(res1 + "<br>");
  ★★★★★★★★类和继承★★★★★★★★     function people(name, age, sex) {         this.name = name;         this.age = age;         this.sex = sex;     }     people.prototype.info = function () {         printf("My name is " + this.name + ", I'm " + this.age + " years old." + "<br>");     }     var humen = new people("Lijing", 19, "man");     humen.info();
  ★★★★★★★★IE4 && IE5 没有apply函数,利用prototype来构造这样的原型函数★★★★★★★★     if (!Function.prototype.apply) {         Function.prototype.apply = function (object, parameters) {             var f = this;             var o = object || window;             var args = patameters || [];
              o._$_apply_$_ = f;
              var stringArgs = [];
              for (var i = 0; i < args.length; i++) {                 stringArgs[i] = "args[" + i + "]";             }
              var arglist = stringArgs.join(",");             var methodcall = "o._$_apply_$_(" + arglist + ");";             var result = eval(methodcall);
              delete o._$_apply_$_;
              return result;         };     }
   ★★★★★★★★类属性,类方法,类私有成员,子类与超类★★★★★★★★     function Rectangle(width, height) {         this.width = width;         this.height = height;     }     Rectangle.prototype.area = function () {         return this.width * this.height;     }     function PositionRectangle(x, y, w, h) {         Rectangle.call(this, w, h);         this.x = x;         this.y = y;     }
      PositionRectangle.prototype = new Rectangle();     delete PositionRectangle.prototype.width;     delete PositionRectangle.prototype.height;     PositionRectangle.prototype.constructor = PositionRectangle;
      var r = new PositionRectangle(2, 2, 2, 2);     printf(r.area());     printf(r instanceof PositionRectangle && r instanceof Rectangle && r instanceof Object);
      注:可以使用call和apply来调用被覆盖的函数     such as: Circle.prototype.toString.apply(this);
  ★★★★★★★★非继承的扩展★★★★★★★★     function borrowMethods(borrowFrom, addTo) {         var from = borrowFrom.prototype;         var to = addTo.prototype;         for (m in from) {             if (from[m] != "function") continue;             to[m] = from[m];         }     }
  ★★★★★★★★确定对象类型★★★★★★★★
      △ typeof null → "object";        typeof undefined → "undefined";        typeof 数组 → "object";        typeof 函数 → "function"
      △ instanceof 和构造函数 constructor       【特点:他们只能允许根据已经知道的类来进行测试对象,无法用于检查未知的对象】
      △ 用Object.toString()测试对象的类型
      △ 鸭子类型识别(Duck Typing)
  ★★★★★★★★渐变效果★★★★★★★★
      function setOpacity(obj, val) {         if (document.documentElement.filters){             obj.style.filter = "alpha(opacity=" + val + ")";         }else {             obj.style.opacity = val / 100;         }     }
      function fadeIn(obj) {         var val = 10;         var t = setInterval(function(){                 if (val >= 100) {                     clearInterval(t);                 }                 setOpacity(obj, val);                 val += 10;             }, 250);     }
          ★★  fadeIn($("changeBox"));
      function setWidth(obj, val) {         obj.style.width = parseInt(val) + "px";     }     function setHeight(obj, val) {         obj.style.height = parseInt(val) + "px";     }     function slide(obj) {         var val = 0;         var t = setInterval(function(){                 if (val >= 300) {                     clearInterval(t);                 }                 setWidth(obj, val);                 setHeight(obj, val);                 val += 10;             }, 80);     }
          ★★  slide($("changeBox"));
      function setTop(obj, val) {         obj.style.top = parseInt(val) + "px";     }     function setLeft(obj, val) {         obj.style.left = parseInt(val) + "px";     }     function move(obj) {         var val = 0;         var t = setInterval(function(){                 if (val >= 300) {                     clearInterval(t);                 }                 setTop(obj, val);                 setLeft(obj, val);                 val += 10;             }, 80);     }
          ★★  move($("changeBox"));
  ★★★★★★★★正则表达式★★★★★★★★     正则表达式中的特殊符号有  ^    $    .    *    +    ?    =    !    |    \    /    ()    []    {}
      *|------------------------------------------------------------     *  |    [...]        括号内任意字符     *  |    [^...]        非上     *  |    .            除换行符和其他Unicode行终止符之外的任意字符     *  |    \w            任何ASCII单字字符     *  |    \W            非上     *  |    \s            任何Unicode空白     *  |    \S            非上     *  |    \d            任何ASCII数字,等价于[0-9]     *  |    \D            非上     *  |    \b            匹配一个词语的边界     *  |    \B            非上     *  |    {n, m}        匹配至少 n 至多 m 次     *  |    {n,}        匹配至少 n 次     *  |    {n}            匹配恰好 n 次     *  |    ?            匹配前一项0或1次     *  |    +            匹配前一项1次或多次     *  |    *            匹配前一项0次或多次     *  |    ^            匹配字符串开头     *  |    $            匹配字符串结尾     *  |    i            忽略大小写     *  |    g            全局匹配     *  |    m            多行匹配     *  |-------------------------------------------------------------
      var text = "JavaScript is not Java, thanks god, that is true! Java is not Javascript!!";     var url = "http:www.baidu.com/pic.html"     var Reg = /java/gi;     var RegUrl = /(\w+):\/\/([\w.]+)\/(\S*)/;     var res = url.match(RegUrl);     var res = text.replace(/Java/gi, "JAVA");     var res = Reg.exec(text);     var res = Reg.test(text);     printf(text);     printf(res);
  ★★★★★★★★drag拖动★★★★★★★★
      var box = document.getElementById("box");     var drag = {         start: function(evt) {             var e = window.event || evt;             box.startX = e.clientX - box.offsetLeft;             box.startY = e.clientY - box.offsetTop;             document.onmousemove = drag.ondrag;             document.addEventListener ? document.addEventListener("mouseup",drag.stop,false) : document.attachEvent("onmouseup",drag.stop);         },         ondrag: function(evt) {             var e = window.event || evt;             with(box.style) {                 position = "absolute";                 left = e.clientX - box.startX + "px";                 top = e.clientY - box.startY + "px";             };         },         stop: function() {             document.onmousemove = "";             document.detachEvent ?  document.detachEvent("onmouseup",drag.start) : document.removeEventListener("mouseup",drag.start,false);         },         init: function() {             box.addEventListener ? box.addEventListener("mousedown",drag.start,false) : box.attachEvent("onmousedown",drag.start);         }     }     drag.init();
  ★★★★★★★★浏览器Location和History★★★★★★★★ Location: protocol + host + pathname + search printf(document.location == document.URL); true
  在大多数情况下,document.location和location.href是相同的,但是,当存在服务器重定向时, document.location包含的是装载的URL,而location.href包含的则是原始请求的文档的URL
      |-------self, window     |     |-------navigator     |     |-------frames[]        |------forms[]--------elments[]------options[]     |                       |     |-------location        |------anchors[]     |                       |     |-------document--------|------links[]     |                       |     |-------history         |------images[]     |                       |     |-------screen          |------applets[]
  for(m in navigator){printf(m + ":" + screen[m]);}
      printf(window.screenX);     printf(window.screenY);     printf(window.outerWidth);     printf(window.outerHeight);     printf(window.innerWidth);     printf(window.innerHeight);     以上属性IE7下没有     printf("");     printf(screen.width);     printf(screen.height);     printf(screen.availWidth);     printf(screen.availHeight);
      子窗口和父窗口的相互控制     function openWin() {         childWin = window.open("javascript:'<h1>hello</h1>'", "newWin", "height=0,width=0");         var val = 0;         var t = setInterval(function(){             if (val > 400){                 clearInterval(t);             }             childWin.resizeTo(val,val);             childWin.moveTo(val,val);             val += 10;         },100);         childWin.opener.focus();         childWin.opener.close();     }     function closeWin() {         childWin.close();     }
      document.onclick = openWin;     document.onkeydown = closeWin;
  ★★★★★★★★ERROR提示★★★★★★★★
      window.onerror = function (msg, url, line) {         alert("Wow..my gosh!!! You got an error.\n\n" + "【Error】: " + msg + "\n【url】: " + url + "\n【line】: " + line);     }
  ★★★★★★★★document★★★★★★★★
      帧结构演示     <html>     <frameset cols="200,*">       <frame src="./gustbook.html">       <frame src="/gustbook.html" name="view_frame">     </frameset>     </html>
      function w() {         printf("something");     }     setTimeout(w,1000); 覆盖原来的文本     注:一个文档绝不应该从时间句柄中调用他自己的write()方法
      ★document.open     功能:打开一个新文档,并擦除当前文档的内容。     语法:document.open(mimetype,replace)     参数:
      mimetype:可选。规定正在写的文档的类型。默认值是"text/html"。     replace:可选。当此参数设置后,可引起新文档从父文档继承历史条目。     注1:open()方法将擦除当前HTML文档的内容,开始一个新的文档,新文档用write()方法或writeln()方法编写。     注2:调用open()方法打开一个新文档并且用write()方法设置文档内容后,必须记住用close()方法关闭文档,并迫使其内容显示出来。
      注3:属于被覆盖的文档的一部分的脚本或事件句柄不能调用该方法,因为脚本或事件句柄自身也会被覆盖。
      ★document.close     功能:close()方法可关闭一个由open()方法打开的输出流,并显示选定的数据。     语法:document.close()     参数:无。
      注:该方法将关闭open()方法打开的文档流,并强制地显示出所有缓存的输出内容。如果您使用write()方法动态地输出一个文档,必须记住当你这么做的时候要调用close()方法,以确保所有文档内容都能显示。
      ★一旦调用了close(),就不应该再次调用write(),因为这会隐式地调用open()来擦除当前文档并开始一个新的文档。
  ★★★★★★★★节点类型★★★★★★★★
      |--------------------------------|     |      接口            nodeType值 |     |--------------------------------|     |    Element                1    |     |    Text                3       |     |    Document            9       |     |    Comment                8    |     |    DocumentFragment    11      |     |    Attr                2       |     |--------------------------------|
  ★★★★★★★★document.documentElement★★★★★★★★  引用的是 html appendChild(), insetBefore(), replaceChild() 可以用document.createDocumentFragment()来创建一个DocumentFragment
      function reverse(n) {         var f = document.createDocumentFragment();         while (n.lastChild) f.appendChild(n.lastChild);         n.appendChild(f);     }
  ★★★★★★★★查询选定的文本★★★★★★★★
      function getSelectedText() {         if (window.getSelection) {             return window.getSelection().toString();         }else if (document.getSelection) {             return document.getSelection();         }else {             return document.selection.createRange().text;         }     }     function start() {         var text = getSelectedText();         if (text) {             $("changeBox").innerHTML = text;             window.open("http:www.baidu.com/s?wd=" + encodeURIComponent(text));         }     }     if (!document.all) {         window.onmouseup = start;     }else {         document.attachEvent("onmouseup", start);     }
      var o = $("changeBox");     printf(o.offsetTop);     printf(o.offsetLeft);     printf(o.clientWidth);     printf(o.clientHeight);     printf(o.scrollTop);     printf(o.scrollLeft);     printf(o.offsetWidth);     printf(o.offsetHeight);
  ★★★★★★★★Key Event and Mouse Event★★★★★★★★     屏蔽右键菜单,可以应用到任何一个区域     oncontextmenu="window.event.returnValue=false"     document.onmousedown = function (e) {         var e = window.event || e;         if (e.button == 0) {             document.body.style.background = "red";         }else if (e.button == 1) {             document.body.style.background = "blue";         }else {             document.body.style.background = "yellow";         }     }
      document.onkeydown = function (e) {         var e = window.event || e;         if (e.shiftKey) {             alert("shift");         }if (e.ctrlKey) {             alert("ctrl");         }else if (e.altKey) {             alert("alt");         }else {             alert("others");         }     }
  ★★★★★★★★合成事件★★★★★★★★     Document.createEvent()创建, Event.initEvent(), UIEvent.initEvent(), MouseEvent.initEvent.initMouseEvent()初始化     dipatchEvent方法来分派事件     IE中,使用Document.createEventObjec来创建一个新的事件对象。然后使用目标元素的fireEvent()方法来分派他     var DataEvent = {};     DataEvent.send = function (target, datatype, data) {         if (typeof target == "string") target = $(target);         if (document.createEvent) {             var e = createEvent("Events");             e.initEvent("dataavailable", true, false);         }else if (document.createEventObject) {             var e = document.createEventObject();         }else return;         e.datatype = datatype;         e.data = data;         if (target.dispatchEvent) target.dispatchEvent(e);         else if (target.fireEvent) target.fireEvent("ondataavailable", e);     };     DataEvent.receive = function (target, handler) {         if (typeof target == "string") target = $(target);         if (target.addEventListener) target.addEventListener("dataavailable", handler, false);         else if (target.attachEvent) target.attachEvent("ondataavaliable", handler);     }
  ★★★★★★★★IE支持客户端永久性★★★★★★★★
      var username = "hustskyking";     var password = "psw";     var memory = $("changeBox");     memory.style.behavior = "url('#default#userData')";     memory.setAttribute("username", username);     memory.setAttribute("password", password);     memory.save('myPersistentData');
      var now = (new Date()).getTime();     var expires = now + 10*24*60*60*1000;     memory.expires = (new Date(expires)).toUTCString();
      var memory = $("changeBox");     memory.load("myPersistentData");     alert(memory.getAttribute("username"));
  ★★★★★★★★AJAX★★★★★★★★     function loadXMLDoc()     {         var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");         xmlhttp.         xmlhttp.onreadystatechange = function ()         {             if (xmlhttp.readyState == 4 && xmlhttp.status == 200)             {                 $("changeBox").innerHTML = xmlhttp.responseText;             }         }         xmlhttp.open("GET", "response.php?func=" + printf("Instead of origin HTML"), true);         xmlhttp.send();     }     window.onclick = loadXMLDoc;
      function createXHR() {         var aVersions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0"];         for (var i = 0; i < aVersions; i++) {             try {                 var oXHR = new ActiveXObject(aVersions[i]);                 return oXHR;             }catch(oError){                 不执行任何操作             }         }         throw new Error("MSXML is not installed.");     }
  在给src特性复制的同时会下载一个图像,这意味着甚至无需将该图像添加到页面中 基于图像实现跨域通信 * *       启动并连续向服务器发送骑牛的最佳方式是什么?在有些情况下,最好是从服务器与载入一些信息, * 以便能够快读相应用户的操;而在另外一些情况下,你可能想在不同的时间间隔内,向服务器发送 * 数据或者从服务器接收数据。
      var oImg = document.createElement("img");     oImg.onload = function() {         alert("Image is ready");     }     oImg.src = "./images/001.gif";     document.body.appendChild(oImg);
      function createIFrame(){         var oframe = document.createElement("iframe");         oframe.name = "myIFrame";         oframe.id = "myIFrame";         oframe.style.cssText = "height:500px; width:400px; border:none";         oframe.src = "http:jqueryui.com/demos/droppable/accepted-elements.html";         document.body.appendChild(oframe);     }     createIFrame();
  面向对象的Javascript 1.公共成员 function Customer() {     this.firstName = "John";     this.lastName = "Smith";     this.getFullName = function () {         return this.firstName +  " " + this.lastName;     } } var john = new Customer();
  2.私有变量 function Customer(firstName, lastName) {     var _firstName = firstName;     var _lastName = lastName;     this.getFullName = function () {闭包         return _firstName +  " " + _lastName;     } }
  prototype属性 扩展类的定义 如果在prototype属性所引用的对象里没有找到,它会到这个引用对象的prototype属性里查找,如此递归查询。 Customer.prototype.getFullName = function () {     return this.firstName + " " + this.lastName; }
  面向对象编程和继承 function Partner() {     this.partnerId = ""; } Partner.prototype = new Customer();
  与上等价 Partner.prototype = {     firstName: "",     lastName: "" }
  ★★★★★★★★Cookie★★★★★★★★ function setCookie(name,value,days) {     if (days) {         var date = new Date();         date.setTime(date.getTime()+(days*24*60*60*1000));         var expires = "; expires="+date.toGMTString();     }     else var expires = "";     document.cookie = name+"="+value+expires+"; path=/"; }
  function getCookie(name) {     var nameEQ = name + "=";     var ca = document.cookie.split(';');     for(var i=0;i < ca.length;i++) {         var c = ca[i];         while (c.charAt(0)==' ') c = c.substring(1,c.length);         if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);     }     return null; }
  function deleteCookie(name) {     setCookie(name,"",-1); }
   
 
   |