久久精品熟女亚洲av麻豆,亚洲男人第一无码aⅴ网站,亚洲欧洲∨国产一区二区三区http://www.tkk7.com/zxb90study/category/52188.html人生路漫漫,多學(xué)些知識總是有益處的zh-cnFri, 27 Jul 2012 12:26:07 GMTFri, 27 Jul 2012 12:26:07 GMT60輸入框要求用JAVASCRIPT去驗證不能超過12個數(shù)字或英文或數(shù)字英文組合,還要求不能超過6個漢字,還要驗證漢字和字母,數(shù)字的組合 http://www.tkk7.com/zxb90study/archive/2012/07/27/384150.htmlzx_bingzx_bingFri, 27 Jul 2012 06:06:00 GMThttp://www.tkk7.com/zxb90study/archive/2012/07/27/384150.html數(shù)據(jù)庫里面username vachar2(12)

這個輸入框要求用JAVASCRIPT去驗證不能超過12個數(shù)字或英文或數(shù)字英文組合,還要求不能超過6個漢字,還要驗證漢字和字母,數(shù)字的組合

如:用戶名1999(就可以),麥克斯韋1999(就不行)

因為數(shù)據(jù)庫里面要求的長度是12,一個漢字就占兩個,但是在頁面可以輸入12個漢字
請用JAVASCRIPT寫出你的解決方案?



Js代碼 復(fù)制代碼 收藏代碼
  1. <html>   
  2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   
  3. 輸入待測字串: &nbsp;<input type="text" onblur="test(this.value);">   
  4. </html>   
  5. <script language="javascript">   
  6. <!--    
  7. //測試匹配情況    
  8. function test(inputVal)    
  9. {    
  10.     //去除首尾空格    
  11.     inputValinputVal = inputVal.replace(/^\s*|\s*$/g,"");    
  12.     //零長字串不作處理    
  13.     if ( inputVal.length == 0 )    
  14.     {    
  15.         return;    
  16.     }    
  17.     //只能匹配數(shù)字,字母或漢字    
  18.     var _match = inputVal.match(/^[a-zA-Z0-9\u4e00-\u9fa5]+$/g);    
  19.     //匹配數(shù)字或字母(包括大小寫)    
  20.     var codeMatch = inputVal.match(/[a-zA-Z0-9]/g);    
  21.     //匹配漢字    
  22.     var charMatch = inputVal.match(/[\u4e00-\u9fa5]/g);    
  23.     //數(shù)字或字母個數(shù)    
  24.     var codeNum = codeMatch ? codeMatch.length : 0;    
  25.     //漢字個數(shù)    
  26.     var charNum = charMatch ? charMatch.length : 0;    
  27.     //成功    
  28.     if ( _match && codeNum + 2*charNum <= 12 )    
  29.     {    
  30.         alert("輸入正確!");    
  31.         return;    
  32.     }    
  33.     //失敗    
  34.     alert("輸入錯誤!");     
  35. }    
  36. //-->   
  37. </script> 


zx_bing 2012-07-27 14:06 發(fā)表評論
]]>
Ajax 模擬動態(tài)列表 http://www.tkk7.com/zxb90study/archive/2012/07/27/384149.htmlzx_bingzx_bingFri, 27 Jul 2012 06:04:00 GMThttp://www.tkk7.com/zxb90study/archive/2012/07/27/384149.html
Java代碼 復(fù)制代碼 收藏代碼
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. <html> 
  3.     <head> 
  4.         <title>index.html</title> 
  5.         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"
  6.         <meta http-equiv="description" content="this is my page"
  7.         <meta http-equiv="content-type" content="text/html; charset=GBK"
  8.         <script type="text/javascript"
  9.         var xmlhttp; 
  10.         function loadXMLDoc(valueFromSelect1){ 
  11.             var url = "three.jsp?valueFromSelect=" + valueFromSelect1 + "&" + Math.random(); 
  12.             alert(url); 
  13.             xmlhttp=null
  14.             if (window.XMLHttpRequest){ 
  15.               xmlhttp=new XMLHttpRequest(); 
  16.             } 
  17.             else if (window.ActiveXObject){ 
  18.               xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
  19.             } 
  20.             if (xmlhttp!=null){ 
  21.               xmlhttp.onreadystatechange=updatePage; 
  22.               xmlhttp.open("GET",url,true); 
  23.               xmlhttp.send(null); 
  24.             } 
  25.             else
  26.               alert("Your browser does not support XMLHTTP."); 
  27.             } 
  28.         } 
  29.          
  30.         function state_Change(){ 
  31.             if (xmlhttp.readyState==4){ 
  32.                 if (xmlhttp.status==200){ 
  33.                     updatePage(); 
  34.                 } 
  35.                 else
  36.                     alert("Problem retrieving XML data"); 
  37.                 } 
  38.             } 
  39.         } 
  40.          
  41.         function updatePage(){             
  42.             // 清空select2 
  43.             while(select2.options[0] != null){ 
  44.                 select2.options[0] = null
  45.             } 
  46.              
  47.             // 設(shè)置select2 
  48.             var xmlDoc = xmlhttp.responseXML; 
  49.             alert(xmlDoc); 
  50.             var labelValueBeanElements = xmlDoc.getElementsByTagName("labelValueBean"); 
  51.            
  52.             for (var i = 0; i < labelValueBeanElements.length; i++){ 
  53.                 var entityValue = xmlDoc.getElementsByTagName("value")[i].childNodes[0].nodeValue; 
  54.                 var entityLabel = xmlDoc.getElementsByTagName("label")[i].childNodes[0].nodeValue; 
  55.                 select2.options[i] = new Option(entityLabel,entityValue,false,false); 
  56.             } 
  57.         } 
  58.         </script> 
  59.     </head> 
  60.  
  61.     <body> 
  62.         select1: 
  63.         <select id="select1" onchange="loadXMLDoc(this.value)"
  64.             <option value="1">1</option> 
  65.             <option value="2">2</option> 
  66.         </select> 
  67.         <br/> 
  68.         select2: 
  69.         <select id="select2"
  70.         </select> 
  71.         <input type="button" value="顯示select2的值" onclick="alert(select2.value)"
  72.     </body> 
  73. </html> 






three.jsp
Java代碼 復(fù)制代碼 收藏代碼
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" 
  2.     pageEncoding="UTF-8"%> 
  3.      
  4. <%! 
  5.     private String fromDB (String valueFromSelect)  { 
  6.         StringBuffer sb = new StringBuffer(); 
  7.  
  8.         if (valueFromSelect.equals("1")) { 
  9.             sb.append("    <labelValueBean>\n"); 
  10.             sb.append("        <value>haha</value>\n"); 
  11.             sb.append("        <label>哈哈</label>\n"); 
  12.             sb.append("    </labelValueBean>\n"); 
  13.             sb.append("    <labelValueBean>\n"); 
  14.             sb.append("        <value>hehe</value>\n"); 
  15.             sb.append("        <label>呵呵</label>\n"); 
  16.             sb.append("    </labelValueBean>\n"); 
  17.         } else if (valueFromSelect.equals("2")) { 
  18.             sb.append("    <labelValueBean>\n"); 
  19.             sb.append("        <value>heihei</value>\n"); 
  20.             sb.append("        <label>嘿嘿</label>\n"); 
  21.             sb.append("    </labelValueBean>\n"); 
  22.             sb.append("    <labelValueBean>\n"); 
  23.             sb.append("        <value>gaga</value>\n"); 
  24.             sb.append("        <label>嘎嘎</label>\n"); 
  25.             sb.append("    </labelValueBean>\n"); 
  26.             sb.append("    <labelValueBean>\n"); 
  27.             sb.append("        <value>woyun</value>\n"); 
  28.             sb.append("        <label>我暈</label>\n"); 
  29.             sb.append("    </labelValueBean>\n"); 
  30.             sb.append("    <labelValueBean>\n"); 
  31.             sb.append("        <value>123</value>\n"); 
  32.             sb.append("        <label>456</label>\n"); 
  33.             sb.append("    </labelValueBean>\n"); 
  34.         } 
  35.         return sb.toString(); 
  36.     } 
  37.  
  38. %> 
  39. <% 
  40.     String valueFromSelect = request.getParameter("valueFromSelect"); 
  41.  
  42.     StringBuffer sb = new StringBuffer(); 
  43.     sb.append("<?xml version=\"1.0\" encoding=\"gb2312\"?>\n"); 
  44.     sb.append("<resultFromDB>\n"); 
  45.     sb.append(fromDB(valueFromSelect)); 
  46.     sb.append("</resultFromDB>\n"); 
  47.     response.setHeader("content-type", "text/xml;charset=GBK"); 
  48.     System.out.println(sb); 
  49.     out.println(sb.toString()); 
  50.     //out.flush(); 
  51.     out.close(); 
  52.      
  53.     %> 


zx_bing 2012-07-27 14:04 發(fā)表評論
]]>
全選調(diào)用的JS函數(shù) http://www.tkk7.com/zxb90study/archive/2012/07/27/384148.htmlzx_bingzx_bingFri, 27 Jul 2012 06:03:00 GMThttp://www.tkk7.com/zxb90study/archive/2012/07/27/384148.html
Java代碼 復(fù)制代碼 收藏代碼
  1. function selectall()  
  2. {  
  3.     //獲取頁面上所有的輸入元素 
  4.     var a = document.getElementsByTagName("input");  
  5.     //如果全選按鈕按上 
  6.     if(document.getElementById("quanxuanbutton").checked == true
  7.     { 
  8.         //循環(huán)是checkbox類型的,就設(shè)置為true 
  9.         for (var i=0; i<a.length; i++) 
  10.         { 
  11.             if (a[i].type == "checkbox"
  12.             { 
  13.                 a[i].checked =true
  14.             } 
  15.         }        
  16.          
  17.     }else{ //如果全選按鈕沒有按上 
  18.       for (var i=0; i<a.length; i++) 
  19.         { 
  20.             if (a[i].type == "checkbox"
  21.             { 
  22.                  
  23.                 a[i].checked =false
  24.             } 
  25.         }   
  26.     } 
  27. }  


zx_bing 2012-07-27 14:03 發(fā)表評論
]]>
dwr 實現(xiàn)二級聯(lián)動 js http://www.tkk7.com/zxb90study/archive/2012/07/27/384147.htmlzx_bingzx_bingFri, 27 Jul 2012 06:02:00 GMThttp://www.tkk7.com/zxb90study/archive/2012/07/27/384147.html
Java代碼 復(fù)制代碼 收藏代碼
  1. //省市聯(lián)動  
  2. var c_cigy = ''
  3. //記錄第二個列表id,以備回調(diào)函數(shù)用 
  4. var cityItemName = ''
  5.  
  6. function  changeCityOyp(province,city,relateItemName) { 
  7.     ServerDwrUtil.getCityList(province.value,setCityOption); 
  8.     //記錄二級下拉的 id relateItemName 供回調(diào)函數(shù)使用 
  9.     cityItemName = relateItemName; 
  10.     // 中國 則 二級下拉 不能選擇 
  11.     if(province.value == '0001') { 
  12.         document.getElementById(cityItemName).disabled = true
  13.     } else
  14.         document.getElementById(cityItemName).disabled = false
  15.     } 
  16.     //省份在一個單元格里,省份前面有個input輸入框,得到input對象,再把省份傳進去 
  17.     var provinceInput  = province.parentNode.firstChild; 
  18.     //如果省份為空,則單元格為空 
  19.     if (province.value == '') { 
  20.         provinceInput.value = ''
  21.         return
  22.     } 
  23.     provinceInput.value = province.options[province.selectedIndex].text; 
  24.      
  25. // 回調(diào)函數(shù) args返回的是list.add(Map) map中{id},經(jīng)過 spring配置 對于一些特例返回的Class,且dwr不能識別的, 
  26. //</dwr:configuration> 
  27. // 設(shè)置二級下拉列表 
  28. function setCityOption (args) { 
  29.     alert(args.toString()); 
  30.     DWRUtil.removeAllOptions(cityItemName); 
  31.     DWRUtil.addOptions(cityItemName, [ "" ]); 
  32.     //id和name怎么確保的   args{[id:xxx,name:yyy],[id:xxx,name:yyyy]} 
  33.     DWRUtil.addOptions(cityItemName, args, "id", "name"); 


zx_bing 2012-07-27 14:02 發(fā)表評論
]]>
javascript獲取select的值全解 http://www.tkk7.com/zxb90study/archive/2012/07/27/384146.htmlzx_bingzx_bingFri, 27 Jul 2012 06:01:00 GMThttp://www.tkk7.com/zxb90study/archive/2012/07/27/384146.html
Js代碼 復(fù)制代碼 收藏代碼
  1. 獲取顯示的漢字 
  2.  
  3. document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text 
  4.  
  5. 獲取數(shù)據(jù)庫中的id 
  6.  
  7. window.document.getElementById("bigclass").value 
  8.  
  9. 獲取select組分配的索引id 
  10.  
  11. window.document.getElementById("bigclass").selectedIndex 
  12.  
  13.  
  14. 例子: 
  15.  
  16. <select name="bigclass" id="bigclass" onChange="javascript:updatePage2();"
  17. <option value="" selected="selected">ajax實驗</option> 
  18. <option value="4">我適宜市哈</option> 
  19. </select> 
  20.  
  21.  
  22. 使用 
  23. document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text 
  24. 的結(jié)果是:我適宜市哈 
  25.  
  26. 使用 
  27. window.document.getElementById("bigclass").value 
  28. 的結(jié)果是:4 
  29.  
  30. 使用 
  31. window.document.getElementById("bigclass").selectedIndex 
  32. 的結(jié)果是:1 


zx_bing 2012-07-27 14:01 發(fā)表評論
]]>
js變量作為URL參數(shù) 中文亂碼解決方法 http://www.tkk7.com/zxb90study/archive/2012/07/27/384144.htmlzx_bingzx_bingFri, 27 Jul 2012 06:00:00 GMThttp://www.tkk7.com/zxb90study/archive/2012/07/27/384144.html
Java代碼 復(fù)制代碼 收藏代碼
  1. var uuid = encodeURI(encodeURI(oRecord.getData("uuid"))); 
  2.              var uname =encodeURI(encodeURI(oRecord.getData("uname"))); 
  3.               alert(uuid+"--"+uname); 
  4.               var updateURL =  contextPath+"/yuidemo/userManager.do?method=updateUser?uuid="+uuid+"&uname="+uname; 



2--控制層

Java代碼 復(fù)制代碼 收藏代碼
  1. String uuid =  java.net.URLDecoder.decode(request.getParameter("uuid"),"utf-8"); 


zx_bing 2012-07-27 14:00 發(fā)表評論
]]>
提高js性能注意事項http://www.tkk7.com/zxb90study/archive/2012/07/25/383903.htmlzx_bingzx_bingTue, 24 Jul 2012 22:44:00 GMThttp://www.tkk7.com/zxb90study/archive/2012/07/25/383903.html一.執(zhí)行效率
1. DOM
1.1 使用DocumentFragment優(yōu)化多次append
說明:添加多個dom元素時,先將元素append到DocumentFragment中,最后統(tǒng)一將DocumentFragment添加到頁面。
該做法可以減少頁面渲染dom元素的次數(shù)。經(jīng)IE和Fx下測試,在append1000個元素時,效率能提高10%-30%,F(xiàn)x下提升較為明顯。

服用前:
for (var i = 0; i < 1000; i++) {
    var el = document.createElement('p');
    el.innerHTML = i;
    document.body.appendChild(el);
}

服用后:
var frag = document.createDocumentFragment();
for (var i = 0; i < 1000; i++) {
    var el = document.createElement('p');
    el.innerHTML = i;
    frag.appendChild(el);
}
document.body.appendChild(frag);

1.2 通過模板元素clone,替代createElement
說明:通過一個模板dom對象cloneNode,效率比直接創(chuàng)建element高。
性能提高不明顯,約為10%左右。在低于100個元素create和append操作時,沒有優(yōu)勢。

服用前:
var frag = document.createDocumentFragment();
for (var i = 0; i < 1000; i++) {
    var el = document.createElement('p');
    el.innerHTML = i;
    frag.appendChild(el);
}
document.body.appendChild(frag);   

服用后:
var frag = document.createDocumentFragment();
var pEl = document.getElementsByTagName('p')[0];
for (var i = 0; i < 1000; i++) {
    var el = pEl.cloneNode(false);
    el.innerHTML = i;
    frag.appendChild(el);
}
document.body.appendChild(frag);

1.3 使用一次innerHTML賦值代替構(gòu)建dom元素
說明:根據(jù)數(shù)據(jù)構(gòu)建列表樣式的時候,使用設(shè)置列表容器innerHTML的方式,比構(gòu)建dom元素并append到頁面中的方式,效率有數(shù)量級上的提高。

服用前:
var frag = document.createDocumentFragment();
for (var i = 0; i < 1000; i++) {
    var el = document.createElement('p');
    el.innerHTML = i;
    frag.appendChild(el);
}
document.body.appendChild(frag);

服用后:
var html = [];
for (var i = 0; i < 1000; i++) {
    html.push('' + i + '
');
}
document.body.innerHTML = html.join('');

1.4 使用firstChild和nextSibling代替childNodes遍歷dom元素
說明:約能獲得30%-50%的性能提高。逆向遍歷時使用lastChild和previousSibling。

服用前:
var nodes = element.childNodes;
for (var i = 0, l = nodes.length; i < l; i++) {
var node = nodes[i];
……
}

服用后:
var node = element.firstChild;
while (node) {
……
node = node.nextSibling;
}


2. 字符串

2.1 使用Array做為StringBuffer,代替字符串拼接的操作
說明:IE在對字符串拼接的時候,會創(chuàng)建臨時的String對象;經(jīng)測試,在IE下,當(dāng)拼接的字符串越來越大時,運行效率會急劇下降。Fx和Opera都對字符串拼接操作進行了優(yōu)化;經(jīng)測試,在Fx下,使用Array的join方式執(zhí)行時間約為直接字符串拼接的1.4倍。

服用前:
var now = new Date();
var str = '';
for (var i = 0; i < 10000; i++) {
    str += '123456789123456789';
}
alert(new Date() - now);

服用后:
var now = new Date();
var strBuffer = [];
for (var i = 0; i < 10000; i++) {
    strBuffer.push('123456789123456789');
}
var str = strBuffer.join('');
alert(new Date() - now);


3. 循環(huán)語句

3.1 將循環(huán)控制量保存到局部變量
說明:對數(shù)組和列表對象的遍歷時,提前將length保存到局部變量中,避免在循環(huán)的每一步重復(fù)取值。

服用前:
var list = document.getElementsByTagName('p');
for (var i = 0; i < list.length; i++) {
    ……
}

服用后:
var list = document.getElementsByTagName('p');
for (var i = 0, l = list.length; i < l; i++) {
    ……
}


3.2 順序無關(guān)的遍歷時,用while替代for
說明:該方法可以減少局部變量的使用。比起效率優(yōu)化,更能直接看到的是字符數(shù)量的優(yōu)化。該做法有程序員強迫癥的嫌疑。

服用前:
var arr = [1,2,3,4,5,6,7];
var sum = 0;
for (var i = 0, l = arr.length; i < l; i++) {
    sum += arr[i];
}   

服用后:
var arr = [1,2,3,4,5,6,7];
var sum = 0, l = arr.length;
while (l--) {
    sum += arr[l];
}

4. 條件分支

4.1 將條件分支,按可能性順序從高到低排列
說明:可以減少解釋器對條件的探測次數(shù)。

4.2 在同一條件子的多(>2)條件分支時,使用switch優(yōu)于if
說明:switch分支選擇的效率高于if,在IE下尤為明顯。4分支的測試,IE下switch的執(zhí)行時間約為if的一半。

4.3 使用三目運算符替代條件分支
服用前:
if (a > b) {
num = a;
} else {
num = b;
}

服用后:
num = a > b ? a : b;


5. 定時器

5.1 需要不斷執(zhí)行的時候,優(yōu)先考慮使用setInterval
說明:setTimeout每一次都會初始化一個定時器。setInterval只會在開始的時候初始化一個定時器

服用前:
var timeoutTimes = 0;
function timeout () {
    timeoutTimes++;
    if (timeoutTimes < 10) {
        setTimeout(timeout, 10);
    }
}
timeout();

服用后:
var intervalTimes = 0;
function interval () {
    intervalTimes++;
    if (intervalTimes >= 10) {
        clearInterval(interv);
    }
}
var interv = setInterval(interval, 10);

5.2 使用function而不是string
說明:如果把字符串作為setTimeout和setInterval的參數(shù),瀏覽器會先用這個字符串構(gòu)建一個function。

服用前:
var num = 0;
setTimeout('num++', 10);   

服用后:
var num = 0;
function addNum () {
    num++;
}
setTimeout(addNum, 10);


6. 其他

6.1 盡量不使用動態(tài)語法元素
說明:eval、Function、execScript等語句會再次使用javascript解析引擎進行解析,需要消耗大量的執(zhí)行時間。

6.2 重復(fù)使用的調(diào)用結(jié)果,事先保存到局部變量
說明:避免多次取值的調(diào)用開銷。

服用前:
var h1 = element1.clientHeight + num1;
var h2 = element1.clientHeight + num2;

服用后:
var eleHeight = element1.clientHeight;
var h1 = eleHeight + num1;
var h2 = eleHeight + num2;

6.3 使用直接量
說明:
var a = new Array(param,param,...) -> var a = []
var foo = new Object() -> var foo = {}
var reg = new RegExp() -> var reg = /.../

6.4 避免使用with
說明: with雖然可以縮短代碼量,但是會在運行時構(gòu)造一個新的scope。
OperaDev上還有這樣的解釋,使用with語句會使得解釋器無法在語法解析階段對代碼進行優(yōu)化。對此說法,無法驗證。

服用前:
with (a.b.c.d) {
property1 = 1;
property2 = 2;
}


服用后:
var obj = a.b.c.d;
obj.property1 = 1;
obj.property2 = 2;


6.5 巧用||和&&布爾運算符

服用前:
function eventHandler (e) {
if(!e) e = window.event;
}


服用后:
function eventHandler (e) {
e = e || window.event;
}


服用前:
if (myobj) {
doSomething(myobj);
}


服用后:
myobj && doSomething(myobj);


6.6 類型轉(zhuǎn)換
說明:
1).    數(shù)字轉(zhuǎn)換成字符串,應(yīng)用"" + 1,性能上:("" +) > String() > .toString() > new String();
2).    浮點數(shù)轉(zhuǎn)換成整型,不使用parseInt(), parseInt()是用于將字符串轉(zhuǎn)換成數(shù)字,而不是浮點數(shù)和整型之間的轉(zhuǎn)換,建議使用Math.floor()或者Math.round()
3).    對于自定義的對象,推薦顯式調(diào)用toString()。內(nèi)部操作在嘗試所有可能性之后,會嘗試對象的toString()方法嘗試能否轉(zhuǎn)化為String。


二.內(nèi)存管理

2.1 循環(huán)引用
說明:如果循環(huán)引用中包含DOM對象或者ActiveX對象,那么就會發(fā)生內(nèi)存泄露。內(nèi)存泄露的后果是在瀏覽器關(guān)閉前,即使是刷新頁面,這部分內(nèi)存不會被瀏覽器釋放。

簡單的循環(huán)引用:
var el = document.getElementById('MyElement');
var func = function () {…}
el.func = func;
func.element = el;


但是通常不會出現(xiàn)這種情況。通常循環(huán)引用發(fā)生在為dom元素添加閉包作為expendo的時候。

如:
function init() {
    var el = document.getElementById('MyElement');
el.onclick = function () {……}
}
init();


init在執(zhí)行的時候,當(dāng)前上下文我們叫做context。這個時候,context引用了el,el引用了function,function引用了context。這時候形成了一個循環(huán)引用。

下面2種方法可以解決循環(huán)引用:

1)    置空dom對象

服用前:
function init() {
var el = document.getElementById('MyElement');
el.onclick = function () {……}
}
init();


服用后:
function init() {
var el = document.getElementById('MyElement');
el.onclick = function () {……}
el = null;
}
init();


將el置空,context中不包含對dom對象的引用,從而打斷循環(huán)應(yīng)用。
如果我們需要將dom對象返回,可以用如下方法:

服用前:
function init() {
    var el = document.getElementById('MyElement');
    el.onclick = function () {……}
    return el;
}
init();


服用后:
function init() {
var el = document.getElementById('MyElement');
el.onclick = function () {……}
try{
return el;
} finally {
    el = null;
}
}
init();

2)    構(gòu)造新的context
服用前:
function init() {
    var el = document.getElementById('MyElement');
    el.onclick = function () {……}
}
init();


服用后:
function elClickHandler() {……}
function init() {
    var el = document.getElementById('MyElement');
    el.onclick = elClickHandler;
}
init();

把function抽到新的context中,這樣,function的context就不包含對el的引用,從而打斷循環(huán)引用。

2.2 通過javascript創(chuàng)建的dom對象,必須append到頁面中
說明:IE下,腳本創(chuàng)建的dom對象,如果沒有append到頁面中,刷新頁面,這部分內(nèi)存是不會回收的!

示例代碼:

    function create () {
        var gc = document.getElementById('GC');
        for (var i = 0; i < 5000 ; i++)
        {
            var el = document.createElement('div');
            el.innerHTML = "test";

            //下面這句可以注釋掉,看看瀏覽器在任務(wù)管理器中,點擊按鈕然后刷新后的內(nèi)存變化
            gc.appendChild(el);
        }
    }


2.3 釋放dom元素占用的內(nèi)存
說明:
將dom元素的innerHTML設(shè)置為空字符串,可以釋放其子元素占用的內(nèi)存。
在rich應(yīng)用中,用戶也許會在一個頁面上停留很長時間,可以使用該方法釋放積累得越來越多的dom元素使用的內(nèi)存。

2.4 釋放javascript對象
說明:在rich應(yīng)用中,隨著實例化對象數(shù)量的增加,內(nèi)存消耗會越來越大。所以應(yīng)當(dāng)及時釋放對對象的引用,讓GC能夠回收這些內(nèi)存控件。
對象:obj = null
對象屬性:delete obj.myproperty
數(shù)組item:使用數(shù)組的splice方法釋放數(shù)組中不用的item

2.5 避免string的隱式裝箱
說明:對string的方法調(diào)用,比如'xxx'.length,瀏覽器會進行一個隱式的裝箱操作,將字符串先轉(zhuǎn)換成一個String對象。推薦對聲明有可能使用String實例方法的字符串時,采用如下寫法:
var myString = new String('Hello World');

zx_bing 2012-07-25 06:44 發(fā)表評論
]]>
主站蜘蛛池模板: 四虎免费影院ww4164h| 亚洲欧洲中文日韩久久AV乱码| 亚洲一卡2卡三卡4卡无卡下载| 国内自产拍自a免费毛片| 久久精品免费大片国产大片| 亚洲综合一区二区| vvvv99日韩精品亚洲| 1000部禁片黄的免费看| 精品特级一级毛片免费观看| 久久精品亚洲综合一品| 成人免费视频国产| 国产成人精品无码免费看| 亚洲av日韩av永久无码电影| 亚洲AV日韩精品久久久久久久| 日本成人免费在线| 性无码免费一区二区三区在线 | 久久精品国产亚洲AV无码麻豆| 国产男女性潮高清免费网站| 亚欧日韩毛片在线看免费网站| 色五月五月丁香亚洲综合网| 内射干少妇亚洲69XXX| 亚洲精品偷拍视频免费观看| 67194成是人免费无码| 无码精品一区二区三区免费视频 | 亚洲日本香蕉视频| 亚洲三区在线观看无套内射| 在线观看免费毛片| 99久久99久久精品免费观看| 黄色三级三级三级免费看| 亚洲人成电影网站| 亚洲AV成人片色在线观看高潮| 亚洲女同成人AⅤ人片在线观看| 无码免费午夜福利片在线 | 成人A片产无码免费视频在线观看 成人电影在线免费观看 | 国产无遮挡又黄又爽免费视频| 午夜免费1000部| 99久在线国内在线播放免费观看| 国产精品免费久久| 免费无码婬片aaa直播表情| 亚洲人成欧美中文字幕| 亚洲成人高清在线观看|