ÎÄÕÂÁбí
 
2009-07-13 17:48
ǰһ¶Îʱ¼ä´ó¼Ò¶¼ÔÚÌÖÂÛwindow.nameÔÚ¿çÓò´«µÝÊý¾ÝÖеÄ×÷Ó㬓window.name µÄÃÀÃîÖ®´¦£ºname ÖµÔÚ²»Í¬µÄÒ³Ãæ£¨ÉõÖÁ²»Í¬ÓòÃû£©¼ÓÔØºóÒÀ¾É´æÔÚ£¬²¢ÇÒ¿ÉÒÔÖ§³Ö·Ç³£³¤µÄ name Öµ£¨2MB£©”--£¨Ê¹Óà window.name ½â¾ö¿çÓòÎÊÌ⣩¡£

¶øHTMLµÄA±êÇ©ÖÐÓÐÒ»¸ötargetÊôÐÔ£¨´Ë´¦²»ÌÖÂÛhtml°æ±¾ºÍ±ê×¼»¯µÈÎÊÌ⣩£¬¶ÔÓ¦µÄÊôÐÔÖµ¾ÍÊÇÕâ¸öwindow.name£¬ÓÚÊÇÎÒÃÇÒ²¿ÉÒÔÀûÓÃtargetºÍwindow.nameÀ´´«µÝÊý¾Ý£¬Ê×ÏȰÑÊý¾Ý·ÅÈëÁ´½ÓµÄtargetÊôÐÔÖУ¬ÔÚд°¿ÚÖÐͨ¹ýwindow.nemaÀ´È¡µÃÊý¾Ý¡£

ÉèÖÃÊý¾Ý£º<a href="xxx.html" target="yyyy">zzzz</a>
ÔÚпª´°¿ÚÒ³Ãæxxx.htmlÖлñÈ¡Êý¾Ý£º var data = window.name; £¨data="yyy"£©

ÔÚʵ¼ÊÓ¦ÓÃÖÐʹÓÃÔÝʱûÓÐbug£¬»¶Ó­ÌÖÂÛ¡£

²Î¿¼£ºw3c -- Specifying target frame information
 
2009-01-21 14:55
·½·¨Ò»£ºhtml+css
<img src="yourUrl/photoname.jpg" style="width:0;height:0;" alt="" />

update:
http://snipplr.com/view/2122/css-image-preloader/
#preloadedImages {
      width: 0px;
      height: 0px;
      display: inline;
      background-image: url(path/to/image1.png);
      background-image: url(path/to/image2.png);
      background-image: url(path/to/image3.png);
      background-image: url(path/to/image4.png);
      background-image: url();
}

·½·¨¶þ£ºjavascript
photo = new Image();
photo.src = "yourUrl/photoname.jpg";

update:
http://snipplr.com/view/554/image-preloader/
function preloadImages() {
    if (document.images) {
        for (var i = 0; i < preloadImages.arguments.length; i++) {
            (new Image()).src = preloadImages.arguments[i];
        }
    }
}
 
2009-01-16 13:11
1. ±íµ¥ÔªËصĻñÈ¡ÓкܶàµÄ·½·¨£¬Ôڴ˼ÇÏÂijÈËÍÆ¼öµÄ×î¼Ñ·½·¨£º
document.forms["formname"].elements["inputname"]£»

2.
Ìáµ½Õâ¸öÎÊÌ⣬ÓÖÒý³öÁíÒ»¸öÎÊÌ⣬¶ÔÏóÊôÐÔµÄÒýÓ÷½Ê½£º
µã(MyObject.prop) »¹ÊÇ ·½À¨ºÅ(MyObject["prop"])£¬ºóÕßµÄprop¿ÉÒÔÊDZäÁ¿¡¢±í´ïʽ¡¢ÉõÖÁÓзµ»ØÖµµÄº¯Êý£¬¶øÇÒ¾Ý˵ËüµÄÐÔÄܸüºÃ£¬¿ÉÒÔ¼õÉÙ²éѯÒýÓÃʱ¼ä£ºÖ»ÔÚMyObjectÖвéѯ£¬¶øMyObject.prop»áÏȲépropÔÙ²éMyObject£¿

3.
ͬʱ»¹ÓÐÒ»¸ö¿ÉÒÔÌá¸ßÐÔÄܵÄС·½·¨£º°ÑÒª´¦Àí±íµ¥µÄËùÓÐ±íµ¥ÔªËØ¶¼ÏÈ´æÆðÀ´£¬ÕâÑùÓõÄʱºò¾Í²»ÓÃÔÙµ½ÎļþÖÐÈ¥²éѯÁË£¬ÀàËÆµÚ¶þÌõ£¿
var formElements = document.forms["mainForm"].elements;
formElements["input1"].value="a";
formElements["input2"].value="b";


²Î¿¼: Javascript Best Practices
 
2008-12-25 17:39
±íµ¥µÄÎı¾ÊäÈë¿òÓÐĬÈÏֵʱ£¬µ±ÊäÈë¿ò¾Û½¹Ê±Ä¬ÈÏÖµ×Ô¶¯Çå³ý£¬²»ÊäÈëÈκÎÖµ½¹µãÀ뿪ÊäÈë¿òʱ»Ö¸´Ä¬ÈÏÖµ£¨ÎÒ°ÑÇé¿ö˵Ã÷°×ÁË£¿£©£¬ÕâÖÖÇé¿öÒ»°ã³öÏÖÔÚËÑË÷ºÍÌîд±íµ¥µÄʱºò£¬ÏÂÃæÊÇÎÒ²»Í¬Ê±ÆÚ´¦ÀíÕâÖÖÊÂÇéµÄ²»Í¬·½·¨¡£

1£©³õʼ£º
¼ûµÃ×î¶à×îԭʼµÄ·½·¨£¬ÏñÒ»¹øÖàÒ»ÑùºÍhtml±êÇ©»ìºÏÔÚÒ»¿é£¬Ò²ÐíÒ²ÓÐËûµÄºÃ´¦

<input type="text" name="yourname" value="Óû§Ãû" onclick="if(this.value == 'Óû§Ãû'){this.value = '';}else {this.select();}" onblur="if(this.value == ''){this.value = 'Óû§Ãû';}" />


2£©ºóÀ´£º¹¤×÷ÖÐºÜ¶àµØ·½¶¼ÒªÓõ½Õâ¸öЧ¹û£¬ÓÚÊǽű¾ÍÑÀë³öÀ´£¬µ«Êǽű¾ºÍÄÚÈÝ»¹²»ÄÜÍêÈ«ÍÑÀ뿪À´

<input type="text" name="yourname" id="kw" value="Óû§Ãû" />

function init_input(id,val)
{
    var ob = document.getElementById(id);
    if(ob){
        ob.onfocus = function(){
            if(this.value==val){
                this.value="";
            }else {
                this.select();
            }
        }
        ob.onblur = function() {
            if (this.value == "") {
                this.value = val;
            }
        }
    }
}
init_input("kw","Óû§Ãû");


3£©×îºó£º
×î½üÎÞÒâÖÐÈ¥µ½Jeff StarrµÄ²©¿Í£¬ÓÚÊÇÕÕËûµÄ´úÂë×öÁ˽øÒ»²½¸Ä½ø£¬½Å±¾ºÍÄÚÈÝÍêÈ«ÍÑÀ룬²¢ÇÒ¿ÉÒÔÅúÁ¿´¦Àí

<div id="wp">
    <input type="text" name="yourname" value="Óû§Ãû" />
    <input type="text" name="email" value="email" />
</div>

function init_input(id){
    var inp = document.getElementById(id).getElementsByTagName('input');
    for(var i = 0; i < inp.length; i++) {
        if(inp[i].type == 'text') {
            inp[i].setAttribute("rel",inp[i].defaultValue)
            inp[i].onfocus = function() {
                if(this.value == this.getAttribute("rel")) {
                    this.value = "";
                } else {
                    this.select();
                }
            }
            inp[i].onblur = function() {
                if(this.value == "") {
                    this.value = this.getAttribute("rel");
                }
            }
        }
    }
}
init_input("wp");


²Î¿¼£º
1.HTML DOM defaultValue Property
2.Unobtrusive JavaScript: Auto-Clear and Restore Multiple Form Inputs on Focus(°Ù¶È¿Õ¼ä¾ÓÈ»°ÑÁ´½ÓÀïµÄ‘javascript’¹ýÂ˵ôÁË)
http://perishablepress.com/press/2008/07/22/unobtrusive-javascript-autoclear-restore-multiple-inputs-focus/
 
2008-10-17 16:22
ǰһ¶Îʱ¼ä×öÒ»¸ö¶«Î÷£¬³öÏÖ¼¸´Î“ȱÉÙ¶ÔÏó”µÄ´íÎó£¬×ܽáÁËһϣ¬¶¼ºÍjavascriptµÄÖ´ÐÐ˳ÐòÓйأ¬µ«ÊÇËÑË÷ÁËһϣ¬javascriptÖкÃÏñûÓÐÏ̵߳ĸÅÄֻ´æÔÚÖ´ÐеÄÏȺó˳Ðò£¨Ä³Ò»¸ö²¿·ÖÍê³ÉÒԺ󣬲ſªÊ¼ÁíÍâµÄ²¿·Ö£©£¬ÕâÖÖÇé¿öÒ»°ãÔÚÓÃsetTiemout»òÕßXMLHttpRequest(Asynchronous)ʱ³öÏÖ¡£

Ò»¡¢Ê×ÏÈÊÇÒì²½XMLHttpRequest(async)µÄ»Øµ÷º¯Êý(callback)µÄÖ´ÐÐ˳Ðò£¬Ò»¿ªÊ¼ÎÒдÁËÀàËÆÏÂÃæµÄ´úÂ룬µ«ÊDZäÁ¿bÒ»Ö±ÊǿյÄ(Òì²½ÇëÇóÕý³£)£º

var a = "";
... ...
request.onreadystatechange = function(data){
if(request.readyState == 4 && request.status == 200){
    a = data;
}
}
request.open ('GET', path, true);//Èç¹ûÉèÖÃΪfalse£¬Ôò²»ÊÇÒì²½£¬´úÂë»á°´Ë³ÐòÖ´ÐÐ
var b = a.length;

×îºó°Ñ¶ÔÊý¾ÝµÄ²Ù×÷·Åµ½»Øµ÷º¯ÊýÀïÃæ£¬½â¾öÎÊÌ⣬¸Ä³ÉÏÂÃæÕâÑù£º
request.onreadystatechange = function(data){
if(request.readyState == 4 && request.status == 200){
    a = data;
    var b = a.length;
}
}

¶þ¡¢Æä´ÎÊÇÔÚjavascript»ñÈ¡¶¯Ì¬Éú³ÉµÄDomÔªËØµÄÎÊÌâ
£¬ÓÃjavascriptÀ´Éú³É½çÃæ£¬È»ºó¶ÔÉú³ÉµÄÔªËØ½øÐвÙ×÷£¬ÀÏÊDZ¨´í“ȱÉÙ¶ÔÏó”¡£¼ò»¯´úÂëÈçÏ£º

window.onload = function(){
var body = document.getElementsByTagName("body")[0];
var elmt = document.createElement( "p" );
elmt.id = "hello";
var txt = document.createTextNode( "hello" );
elmt.appendChild(txt);
var did = document.getElementById("hello");
alert(did.id);
body.appendChild(elmt);
}

È¡²»µ½ÓÃcreateElement´´½¨µÄ¶ÔÏ󣬿ÉÊÇ£¬Õâ¸ö¶ÔÏóÔÚµ÷ÓÃǰÃ÷Ã÷ÒѾ­±»´´½¨Á˰¡¡£ºóÀ´·¢ÏÖ£¬¶ÔÕâ¸ö¶ÔÏó½øÐвÙ×÷֮ǰ£¬²¢Ã»ÓаÑËüÌí¼Óµ½Õû¸öÎĵµÖÐÈ¥£¬ÓÚÊǵ÷ÕûÁËһϴúÂëµÄ˳Ðò£º

body.appendChild(elmt);
var did = document.getElementById("hello");
alert(did.id);

ÔËÐÐÕý³£ÁË¡£¿ÉÊÇÓÖÓÐÐÂÎÊÌ⣬µ±ÎÒ°ÑËü·Åµ½Ò»¸öÉÔ΢¸´ÔӵĻ·¾³ÖÐÈ¥£¬Ö»ÄÜÔÚ×îºóµÄʱºòÒ»´Î°ÑËùÓеÄDomÔªËØÌí¼Óµ½ÎĵµÖУ¬Ò²¾ÍÊÇappendChild(elmt)²»¿ÉÄܷŵ½getElementById(elmtId)Ç°Ãæ£¬ÓÚÊÇÓÖÒ»·¬google/baidu£¬·¢ÏÖÕâÊÇÒ»¸öºÜÆÕ±é¡¢»ù´¡µÄÎÊÌ⣬ͬʱҲ·¢ÏÖsetTimeoutµÄÆæÃîÓÃ;£¬ÈÃjavascript´úÂë°´·Ç˳ÐòÖ´ÐУº

setTimeout(function(){
   var did = document.getElementById("hello");
   alert(did.id);
},0);
body.appendChild(elmt);

ÕâÑùµÄ»°£¬¼´Ê¹setTimeoutÉèÖõÄÑÓ³ÙΪ0£¬ËüÀïÃæµÄº¯ÊýÒ²»áÔÚËùÓдúÂëÖ´ÐÐÍêÒԺ󣬲ſªÊ¼Ö´ÐУ¬ÓÚÊÇÎÊÌâÒ²¾Í½â¾öÁË¡£

²Î¿¼£º
Realazy: ÈÏʶÑÓ³Ùʱ¼äΪ 0 µÄ setTimeout
Javascriptkata: Ajax, javascript and threads : the final truth
Fitzblog: Nine Javascript Gotchas
 
2008-05-27 15:09
×î½ü¾­³£É϶¹°ê£¬Ò²¹Ø×¢ÁËÒ»ÏÂËûÃÇ×î½üÍÆ³öµÄAPI·þÎñ£¬¾Ý˵ÌÔ±¦Ò²½«¿ª·ÅAPI£¬google¸üÊDz»ÓÃ˵£¬¿ªÊ¼ÎªÖÚ¶àµÄajax¿âÌṩ·þÎñÆ÷¶Ë·Ö·¢·þÎñ¡£Ô½À´Ô½¶àµÄÍøÕ¾¿ªÊ¼ÌṩAPI·þÎñ£¬Ò²±íʾÓÐÔ½À´Ô½¶àµÄMashup¿ÉÄÜÐÔ£¬Å×שÒýÓñ£¬Ï£ÍûÔ½À´Ô½¶àµÄ¿ª·¢Õß¼ÓÈëµ½Õâ¸öÁìÓò¡£

Ò»¡¢JsonP + API£ºJavascrptÖпçÓòµ÷ÓÃÊý¾Ý

ÏÈÁ˽âÏÂJsonP£¨JSON with Padding£©£º
ÀûÓÃscript±êÇ©£¬Í¨¹ýÌØ¶¨µÄsrcµØÖ·µÄµ÷Óã¬À´Ö´ÐÐÒ»¸ö¿Í»§¶ËµÄjsº¯Êý£¬ÔÚ·þÎñÆ÷¶ËÉú³ÉÏà¶ÔµÄÊý¾Ý£¨json¸ñʽ£©²¢ÒÔ²ÎÊýµÄÐÎʽ´«µÝ¸øÕâ¸ö¿Í»§¶ËµÄjsº¯Êý²¢Ö´ÐÐÕâ¸öº¯Êý£¬Ç°ÌáÊÇÐèÒª·þÎñÆ÷¶ËµÄÊý¾ÝÊä³öÖ§³Ö¡£

ÒÔdeliciousµÄAPIÌṩµÄjsonpÖ§³ÖΪÀý¡£

1. ÎÒÃÇÏÈÔÚ¿Í»§¶Ëдһ¸ö´ø²ÎÊýµÄº¯ÊýdoyourworkÒԱ㴦Àí·µ»ØµÄÊý¾Ý£º
    <script type="text/javascript">
    <!--
    function doyourwork(data){
    alert(data);
      //´¦ÀíÊý¾Ý´úÂë....
    }
    //-->
    </script>


2. ͨ¹ýscript±êÇ©£¬µ÷ÓÃhttp://feeds.delicious.com/feeds/json/bob?callback=doyourwork Éú³ÉÊý¾Ý²¢×÷Ϊ²ÎÊý´«ÈëdoyourworkÀ´Ö´Ðк¯Êý£º
<script type="text/javascript" src="http://feeds.delicious.com/feeds/json/bob?callback=doyourwork"></script>
ÕâÒ»ÐÐÏ൱ÓÚÖ´ÐÐÒÔÏÂjavascript´úÂ룺
doyourwork(·þÎñÆ÷¶ËÉú³ÉµÄÊý¾Ý) --- ÒÔ·þÎñÆ÷¶ËÉú³ÉµÄÊý¾ÝΪ²ÎÊýÖ´ÐÐjsº¯Êýdoyourwork¡£


µ±È»£¬ÏÖÔںܶàµÄjs¿â¶¼ÒѾ­ÓÐÏàÓ¦µÄÖ§³Ö£¬ÓÃÆðÀ´ºÜ·½±ã£¬±ÈÈçÔÚjqueryÖУ¬¿ÉÒÔÕâÑù
$.getJSON("http://feeds.delicious.com/feeds/json/bob?callback=", function(data){
    alert(data);
    //´¦ÀíÊý¾Ý´úÂë....
});

¸ü¾ßÌåµÄ¶«Î÷ÇëÎÒgoogle codeÉϵÄÀý×Ó¡£

²Î¿¼ remote json jsonp


¶þ¡¢Google AJAX Libraries API for Mashup£¡

GoogleµÄDion AlmaerÒ²¿ªÊ¼ÔÚajaxian.comÉÏÍÆ¹ãAJAX Libraries API£ºÆäʵ¾ÍÊǰѸ÷ÖÖAJAX¿â·ÅÔÚgoogleµÄ·þÎñÆ÷ÉÏ£¬Îª¿ª·¢ÕßÌṩ¸ü¿ì¸üºÃµÄµ÷Ó÷þÎñ¡£

ĿǰÒѾ­ÌṩµÄAJAX¿â°üÀ¨£ºjQuery / prototype / script_aculo_us / MooTools / dojo¡£

µ÷Ó÷½Ê½Ò»
<script src="http://www.google.com/jsapi"></script>
<script>
// ¼ÓÔØ jQuery£» °æ±¾:¿ÉÒÔÑ¡1£¬»á×Ô¶¯¼ÓÔØ1µÄ×îа汾1.2.6£»Ñ¹Ëõ£¨¿ÉÑ¡£©£º²ÎÊýuncompressed
google.load("jquery", "1.2.6", {uncompressed:true});

// Ò³Ãæ¼ÓÔØÍê³ÉºóÖ´ÐÐÏÂÃæ³ÌÐò
google.setOnLoadCallback(function() {
    $("<p>jQuery load completed</p>").appendTo("body");
});
</script>


µ÷Ó÷½Ê½¶þ

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js"></script>
<script>
    $("<p>jQuery load completed</p>").appendTo("body");
</script>
 
2008-04-30 15:45
×î½üÔÚÕâÀïÌùÁËЩ±È½ÏÐéµÄ¶«Î÷£¬ÆäʵÎÒÖ»ÊÇcoder£¬×î»ù´¡µÄÊÇʵÓ㬿ɲÙ×÷ÐÔ¡£

ÏÂÃæÊÇÎÒµÄcssÄ£°åµÄ²¿·Ö£¬´¿Êô¸öÈËϰ¹ß£¬Ã¿¸öÈ˶¼¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄϰ¹ß£¬×öÒ»¸ö²î²»¶àµÄcssÄ£°å£¬ÒÔºó×ö¶«Î÷µÄʱºòÄÃÀ´¸Ä¸Ä¾Í¿ÉÒÔÓÃÁË£¬¿ÉÒÔ½ÚʡһЩʱ¼ä¡£

body{margin:0 auto;background: #fff;color:#333;} //ÕýÎÄÑÕÉ«²»ÊÇ´¿ºÚ
body,td,select, input, textarea{font:12px/1.5em arial,"ËÎÌå",helvetica,clean,sans-serif;}//×ÖÌå´óСÓеÄÇé¿öϲ»Äܼ̳Ð
td{vertical-align:top;}//±í¸ñµ¥ÔªµÄÄÚÈÝ´¹Ö±·½Ïò¶¥²¿¶ÔÆë
table{border-collapse: collapse; border-spacing:0; border:0;}//Ï÷³ý±í¸ñ±ß¿òºÍ¼ä϶
img{border:0;}//È¥³ýͼƬ±ß¿ò(¼ÓÁ´½ÓµÄͼƬ)
form{margin:0;padding:0;}//Õâ¸öÓÐʱºòÈÝÒ×±»ºöÊÓ
a:link{color:#369;text-decoration:none;}//¸Ä±äĬÈϵij¬Á´½ÓÑùʽ£¬ÑÕÉ«ºÍÏ»®Ïß
a:visited{color:#888;text-decoration:none;}
a:hover{color:#f00; text-decoration:underline;}
a:active{color:#fc0; text-decoration:none;}

*{margin:0;padding:0;}
»áÖØÖÃËùÓеıêÇ©£¬ÓÐÀûÓбף¬¿ÉÒÔ½ÚÊ¡ºÜ¶à´úÂ룬µ«»áÇ£Á¬ÓÐЩ²»Ïë±»ÖØÖõıêÇ©£¬ÓÐЩ±êÇ©ËäÈ»±»ÖØÖÃÁË£¬µ«ÊÇÄãµÄÒ³Ãæ¸ù±¾Ã»ÓÐÕâЩ±êÇ©£¬Èç¹û±êÇ©¶àµÄʱºòЧÂÊ¿ÉÄܲ»ºÃ£¬ÕâÑùµÄ½²¾¿¿ÉÄÜÉÔ΢ÓÐЩ¹ýÁË¡£

Referrence:No CSS Reset
 
2008-04-28 17:32
ÔÚD2µÄ»á³¡´ýÁËÒ»Ì죬ÌýËĸö²»Í¬·ç¸ñÈ˽²²»Í¬µÄ¶«Î÷¡£


Öܰ®Ãñ

ÉÏÎçÈ볡µÄʱºò£¬ÔÚÃÅ¿ÚÌîÎʾíÄÃÁ˵ÚËÄÆÚµÄ¡¶³ÌÐòÔ±¡·£¬ÉÏÃæÕýºÃÓа®ÃñµÄһƪÎÄÕ¡¶×öÈË¡¢×öÊ¡¢×ö¼Ü¹¹Ê¦——¼Ü¹¹Ê¦ÄÜÁ¦Ä£ÐͽâÎö¡·£¬µ«ÊÇËûÒª½²µÄÈ´ÊǓǰ¶ËÉè¼ÆÓ뿪·¢µÄ»ù±¾Ä£Ê½”¡£
ËûµÄ½²ÑÝÄÚÈݱȽϷḻ£¬½²Á˺ܶà±È½ÏÐéµÄ¸ÅÄîºÍÀíÂÛ£¬ÏóÓû§¡¢ÄÚÈÝ¡¢Êä³öÉ豸¡¢½¹µãµÄÒâͼ/ÏòÐÔ/ÐÐΪÒýµ¼µÈ£¬¿ÉÒÔÔö¼Ó֪ʶ¹¹³É£¬×îºóÄóöÀ´Ò»¸ö¹«Ê½£ºU=E2+C2(Effect/Experience¡¢Control/Context)¡£
ÆÚ¼äÌáÁËÈý¸ö±È½Ï¼òµ¥µÄÎÊÌ⣬ËͳöÈý±¾ËûµÄ¹ØÓÚjavascriptµÄÐÂÊ飬ºĮ́ϵÄÎÒÃÇ»¥¶¯²»´í¡£


»Æ¼Ì¼Ñ

ÏÂÎçµÄµÚÒ»³¡£¬½²µ½Silverlight 2µÄÐÂÌØÐÔ£¬Ò»ÌýÓüÇʱ¾¶ÔXamlºÍJavascriptµÄ±à¼­½øÐпª·¢ÒѾ­ÊÇÀúÊ·£¬ÏÖÔÚÐèÒªruntimeÒÔÍâµÄ .net»·¾³(vs200x)Ö§³Ö¿ª·¢£¬ÎÒËÉÁËÒ»¿ÚÆø£¬ÒÔºó²»Óû¨Ì«¶àʱ¼äÔÚÕâ¸ö¶«Î÷ÉÏÁË¡£²»¹ý»Æ¼Ì¼ÑµÄ½²ÑÝ»¹ÊDz»´íµÄ£¬¸ø³öÁ˺ܶàµÄÓ¦ÓÃdemo£¬»¹ÏÖ³¡codeingÁËһЩ¼òµ¥ÊµÀý¡£


Hedger Wang


HedgerÊÇÏÖÔÚyahoo groupµÄtech lead£¬Ì¨ÍåÈË(Íõçô?)£¬ËûµÄ½²Ñݺܾ«²Ê£¬Ò²ºÜʵÔںܾßÌ壬չʾÁËËûµÄÐí¶àjsºÍphpº¯Êý£¬Ä¿µÄ¾ÍÊÇÈçºÎÓÐЧ¹ÜÀíajaxÒì²½ÇëÇ󣬽ÚÔ¼ÆóÒµ×ÊÔ´£¬notepad++ÊÇËûµÄ±à¼­Æ÷£¬¶ø²»ÊÇ.netµÈ×Ô¶¯Éú³É´úÂëµÄ¹¤¾ß£¬¹ÛÖÚÌáÎʺܾßÌåºÜ¾ßÌåºÜ¡£¡£¡£


Nate Koechley

ÄÉÌØ-¿Æ¿ËÀ³ÊÇNateÃûƬÉϵÄÖÐÎÄÃû£¬Ö°Î»ÑÅ»¢¸ß¼¶Ç°¶Ë¹¤³Ìʦ£¬ËûµÄչʾÉÏÓо仰Õâô˵£º"We tell browsers what to do"¡£yuiÊÇËûµÄÖ÷Ì⣬ҲÊÇËûµÄ¹¤×÷£¬Progressive EnhancementÊÇÒþº¬µÄ½²ÑÝÖ÷Ìâ¡£ËäÈ»ÏÖÔÚһЩyuiµÄÄ£¿éÓÃÆðÀ´»áÔ½À´Ô½¼òµ¥£¬µ«ÊÇhtml±êÇ©ÀïµÄidºÍclassʵÔÚÌ«¶à¡£¹ØÓÚÆäËû£¬ÎÒûÓÐÔÚʵ¼ÊÖÐÓùýÒò´ËûÓз¢ÑÔȨ¡£×îºó°ËØÔһϣ¬NateµÄ±Ê¼Ç±¾ºÍËûµÄÊýÂëÉ豸£¨ÔÚÎÒµÄÏà²áÀ¡£

Ïà¹ØÍ¼Æ¬Çë¿´ÎÒµÄÏà²á
 
2008-04-10 18:02
ÕâÁ½Ìì¿´Jens Meiert£¨Ò»¸ö1978ÄêÉúµÄ¿ªÊ¼Îªgoogle¹¤×÷µÄµÂ¹úÈË£©µÄblog£¬ÔÚÕâÀï·ÖÏíºÍ×ܽáһЩ¹ØÓÚѧϰµÄ¶«Î÷¡£

Jens Meiertд¹ýÁ½Æª¹ýÓÚ×öÍøÕ¾µÄÈçºÎѧϰµÄÎÄÕ£¬Ò»ÆªÊǹØÓÚ²ßÂÔµÄ3 Great Learning Strategies for GeneralistsһƬÊǹØÓÚ¾ßÌå²Ù×÷µÄWhat Makes a Professional Web Developer?´óÖÂ×ܽáÈçÏ£¬¿ÉÄܺÍÔ­ÎÄÒâ˼ÓÐЩƫ²î£¬´ó¼Ò¿ÉÒÔÈ¥¿´ÏÂÔ­ÎÄ¡£

Ôõôѧϰ

1.80/20·¨Ôò£¬»¨80%µÄʱ¼äÀ´¹Ø×¢ºÍѧϰÄãµÄÄ¿±ê¶ÔÏó
2.ÓµÓкõİñÑùºÍ¿É¿¿µÄÐÅÏ¢À´Ô´£¬¿ÉÒÔÉÙ×ߺܶàÍä·
3.²»ÒªÇ¿ÐмÇÒäijЩ¶«Î÷£¬¶øÊDz»¶ÏµØÊ¹ÓÃËüÃÇ

ÈçºÎѧϰ
1.ѧϰweb±ê×¼--ÔĶÁ¹æ·¶Îĵµ£»
2.Àí½â¿ÉÓÃÐÔ¡¢Ç׺ÍÐÔ--ÍøÕ¾ÈçºÎΪ¸÷ÖÖÉ豸ºÍËùÓÐÈË·þÎñ£»
3.¶ÀÁ¢Ë¼Î¬--½á¹¹¡¢±íÏÖ¡¢ÐÐΪÈý²ã·ÖÀ룻
4.ʵ¼ù--¾¡Á¿ÊÖд´úÂ룻

×î½üÔÚblogµÄÓÒ²à¼ÓÉÏÁËһЩÁ´½Ó£¬ºÃµÄ°ñÑùºÍ¿É¿¿µÄÐÅÏ¢À´Ô´£¬¿ÉÒÔ½ÚÊ¡ºÜ¶àµÄѧϰ³É±¾¡£

¸½Ä³¸ö´ó½±È¥ÄêµÄÐû´«ÓÄã¿´µ½µÄÔ½¶àÄãÄÜÏëµ½µÄÒ²¾Í¸ü¶à(the more things you see, the more idea you have)
 
2008-02-29 12:56
ÏÂÀ­±íµ¥selectÊÇ±íµ¥ÖеÄÌØÀý£¬Ê×ÏÈÊÇieºÍffÏÂcssÑùʽµÄ²»Í¬±íÏÖ£¬»¹ÓÐÔÚie6Ï£¬ËüµÄz-index¼¶±ð¸ß£¬»á³öÏÖÔÚËûµÄ¸²¸Ç²ãÉÏ¡£¡£¡£×ÜÖ®×ö³öÒ»¸öƯÁÁµÄselect±È½Ï·ÑÊ¡£

ÏÂÃæÍ¨¹ýjavascriptºÍcss½áºÏ×öÁËÒ»¸ö×Ô¶¨ÒåselectÑùʽµÄº¯Êý¡£Ë¼Â·ÈçÏ£º
    1.Òþ²ØÄ¬ÈÏ±íµ¥
    2.È¡µÃ±íµ¥×ø±êλÖÃ
    3.ÔÚԭλÖô´½¨Ò»¸öûÓд¥·¢µÄselectºÍµã»÷ʼþ
    4.ÔÚ¶ÔӦλÖô´½¨Ò»¸ö´¥·¢ºóµÄselectºÍoption
    5.¸ù¾ÝÊó±êÔÚÄ£ÄâselectÉϵÄʼþ¸Ä±äûÓд¥·¢µÄselectµÄÎı¾ºÍÔ­À´selectµÄÖµ

Javascript
function si(o,oc,ic){
//²ÎÊý1£ºÐèÒªÑùʽ»¯µÄselectµÄid£¬²ÎÊý2£ºÌæ´úselectµÄcalss£¬²ÎÊý1£ºÌæ´ú´¥·¢ºóµÄselectµÄclass

//Òþ²ØÄ¬ÈϵÄselect
    var o = document.getElementById(o);
        o.style.visibility = "hidden";
    var l = o.options.length;

//»ñÈ¡selectµÄ×ø±êλÖÃ
    var x = o.offsetLeft;
    var y = o.offsetTop;

//´´½¨Ä£ÄâµÄselect
    var n = document.createElement("div");
        n.className = oc;
        n.style.position = "absolute";
        n.style.left = x + "px";
        n.style.top = y + "px";
        n.style.width = o.offsetWidth - 2 + "px";//¿í¶È¿ÉÒÔ¸ù¾Ýʵ¼ÊÇé¿öµ÷Õû
    var n_c = document.createTextNode(o.options[o.selectedIndex].innerHTML);
        n.appendChild(n_c);
    var pn = o.parentNode;
        pn.insertBefore(n, o);


//´´½¨Ä£ÄâµÄselectµÄÑ¡Ôñ״̬ϵİüº¬ÈÝÆ÷
    var ns = document.createElement("div");
        ns.className = ic;
        ns.style.display = "none";
        ns.style.position = "absolute";
        ns.style.left = x + "px";
        ns.style.top = y + "px";
        ns.style.width = o.offsetWidth - 2 + "px";//¿í¶È¿ÉÒÔ¸ù¾Ýʵ¼ÊÇé¿öµ÷Õû

//´´½¨Ä£ÄâµÄÑ¡Ôñ״̬ϵÄselect
        for(var i=0;i<l;i++){
           
            //´´½¨Ä£ÄâµÄselectµÄoptionÎı¾ÄÚÈÝ
                var nsc = document.createElement("div");
                var ns_c = document.createTextNode(o.options[i].innerHTML);
                    nsc.appendChild(ns_c);
                    ns.appendChild(nsc);

            //Ä£ÄâoptionµÄÊó±ê»¬¹ýЧ¹û
                    nsc.onmouseover = function(){
                        this.style.background = "red";
                    }
                    nsc.onmouseout = function(e){
                        this.style.background = "";
                        if (window.event){
                            window.event.cancelBubble = true;
                        } else{
                            e.stopPropagation();
                        }
                    }

            //Ä£ÄâoptionµÄѡȡЧ¹û
                    nsc.onclick = function(){
                        n.innerHTML = this.innerHTML;//¸Ä±äÄ£ÄâselectµÄÄÚÈÝ
                        for(var j=0;j<l;j++){
                            if(o.options[j].value==n.innerHTML){
                                o.options[j].selected = "selected";//¸Ä±äÔ­À´selectµÄvalue
                            }
                        }
                        n.style.display = "";
                        ns.style.display = "none";
                    }
            }

        //Ìí¼ÓÄ£ÄâµÄÑ¡Ôñ״̬ϵÄselect
        pn.insertBefore(ns, o);


//µã»÷ÏÔʾģÄâµÄoptionÄÚÈÝ
        n.onclick = function(){
            n.style.display = "none";
            ns.style.display = "";
        }

//Êó±êÒÆ¿ªÒþ²ØÄ£ÄâoptionµÄÄÚÈÝ£¨´æÔÚÎÊÌ⣬ÓÐʱºò²»Òþ²Ø£©
        ns.onmouseout = function(e){
            n.style.display = "";
            ns.style.display = "none";
        }

}

HTML
<div class="s">
    <select id="sel">
        <option value="ÇëÑ¡Ôñ" selected="selected">ÇëÑ¡Ôñ</option>
        <option value="Ñ¡ÏîÒ»">Ñ¡ÏîÒ»</option>
        <option value="Ñ¡Ïî¶þ">Ñ¡Ïî¶þ</option>
        <option value="Ñ¡ÏîÈý">Ñ¡ÏîÈý</option>
        <option value="Ñ¡ÏîËÄ">Ñ¡ÏîËÄ</option>
    </select>
</div>
<script type="text/javascript">
<!--
    si("sel","n_sel","ns_sel");
//-->
</script>

CSS
body,select{margin:0;padding:0;font:12px arial; }
.s{margin:100px;padding:10px; }
.n_sel{padding-top:2px;background: #f8f8f8 url(r_dot.jpg) 50px 6px no-repeat;cursor:pointer;border: 1px solid #ccc;}
.ns_sel{background: #ffc url(r_dot.jpg) 50px 6px no-repeat;border: 1px solid #ccc;}
.ns_sel div{padding-top:2px;cursor:pointer;position: relative; }
</div>
 
2008-02-01 12:30
ÏÖÔÚµ½´¦¶¼ÊÇҳǩ(tab)£¬Óв»×Ô¶¯²¥·ÅµÄ£¬¿ÉÒÔ²»¶Ï×Ô¶¯Ñ­»·µÄ£¬Ö»Ñ­»·Ò»´ÎµÄ£¬µã»÷ÒÔºó¼ÌÐøÑ­»·£¬»òÕßֹͣѭ»·£¬×î½ü×ÁÄ¥×Å£¬Ð´ÁËÒ»¸öº¯Êý£¬»ù±¾ÉÏ¿ÉÒÔʵÏÖÕâЩ»ù±¾¹¦ÄÜ¡£

ÏÂÃæÊÇÓ¦ÓÃʵÀýºÍº¯Êý£¬¿ÉÄÜhtml²¿·ÖµÄidÓеã¶à£¬ºÜ¶àµØ·½»¹Óдý¸ÄÉÆ¡£

<dl id="tab_01" class="tab">
    <dt id="tab_01">½á¹¹</dt>
    <dd id="tabs_01">
        <h2>Structure</h2>
        <p>XHTML¡¢XML</p>
    </dd>

    <dt id="tab_02">±íÏÖ</dt>
    <dd id="tabs_02">
        <h2>Representation</h2>
        <p>CSS</p>
    </dd>

    <dt id="tab_03">ÐÐΪ</dt>
    <dd id="tabs_03">
        <h2>Behavior</h2>
        <p>DOM¡¢ECMAScript</p>
    </dd>
</dl>

<script type="text/javascript">
<!--
    timertab("tab_01",2);
//-->
</script>

<style type="text/css" media="screen">
<!--
body,dl,dt,dd{font:12px/1.5em arial;padding:0;margin:0;color:#666;}
body{margin:25px;}
a:link{color:#369;text-decoration: none; }
a:hover{color:#c83;}
.tab{width:210px;border:1px solid #ccc;height: 140px;position: relative; }
.tab dt{float:left;width:70px;padding:3px 0 2px;background: #eee;text-align: center;color:#666;cursor:pointer;}
.tab dt.on{background: #fff;color:#c83;}
.tab dd{display:none;position: absolute;left:0;top:25px;padding:10px;}
.tab dd.on{display:block;}
.tab dd h2{margin:7px 3px 0;font:bold 1.2em arial;color:#999;}
.tab dd p{margin:3px;text-indent: 2em;}
-->
</style>

function
timertab(t,a){ //tΪҪӦÓô˺¯ÊýµÄtabµÄid£¬a³õʼ»¯Ê±ÏÔʾµÄÏîÄ¿µÄ˳ÐòÊý
    this.obj = document.getElementById(t).getElementsByTagName("dt");//µ¼º½
    this.eles = document.getElementById(t).getElementsByTagName("dd");//ÄÚÈÝ
    this.start = a-1;//³õʼÏîÄ¿
    this.speed = 2000;//Çл»¼ä¸ô
    this.setid = null;//¶¨Ê±Æ÷

    var loop = function(){ //×Ô¶¯Çл»
        for(var i=0,j=obj.length;i<j;i++){
            obj[i].className = "";
            eles[i].className = "";
        }
        obj[start].className = "on";
        eles[start].className = "on";
        setid=setTimeout(loop,speed);
        start++;
        if(start==obj.length){
            start=0;
             //clearTimeout(setid);//ֻѭ»·Ò»´Î
        }
    };loop();

    var clik = function(){ //µã»÷
        for(var i=0;i<obj.length;i++){
            obj[i].onclick = function(){
                clearTimeout(setid);//Í£Ö¹Ô­À´µÄ×Ô¶¯Çл»
                var inb = this.id.substr(this.id.indexOf("#")+6,1);//ÕâÀïµÄÊý×Ö6ΪdtµÄidÖÐÊý×ÖÐòºÅ³öÏÖµÄλÖÃÊý
                for(var i=0,j=obj.length;i<j;i++){//ÖØÐ³õʼ»¯
                    obj[i].className = "";
                    eles[i].className = "";
                }
                this.className = "on";//ÏÔʾµã»÷Ïî
                eles[inb-1].className = "on";

                start=inb-1;//´ÓÕâÀ↑ʼ¼ÌÐøÑ­»·£¨¿ÉÒÔ¸ù¾ÝÒªÇóÑ¡ÔñÊÇ·ñÈ¥µôÕⲿ·Ö£©
                loop();

                return false //È¡Ïû<a href="#tabs_01">ĬÈÏʼþ
            }
        }
    };clik();
}
 
2008-01-21 14:12
×î½ü¿´µ½ºÜ¶à̸ÂÛCSS¿ò¼Ü£¨CSS Framework£©µÄÎÄÕ£¬´ó¸ÅµÄ˼·ÈçÏ£º
    1. ÏÈÇå³ý(X)HTML±êÇ©µÄĬÈÏÑùʽ
    2. ÉèÖÃÊôÓÚÄã×Ô¼ºµÄ(X)HTML±êÇ©ÑùʽºÍÄã³£ÓõÄClass»òÕßIdÑùʽ

µ±È»£¬¿ò¼Ü×î»ù±¾µÄÓÃ;¾ÍÊǼõÉÙÖØ¸´ÀͶ¯£¬ÄܽÚÊ¡ÄãµÄʱ¼ä£¬Ò»¸öÏîÄ¿²»ÓôÓÒ»ÎÞËùÓпªÊ¼...... ¿ÉÒÔʹÓÃÄã×Ô¼º×ܽáºÍÊÕ¼¯µÄCSSºÍ(X)HTML´úÂëÄ£¿é£¬Ç°ÌáÊÇÏÈÓµÓпò¼Ü(CSSºÍ[»ò]XHTML)¡£

ͬʱÏëµ½ÒÔǰ×ܽá¹ýһЩÎÄ×Ö(X)HTML ±êǩĬÈϵÄÑùʽÊôÐÔÖµ£¬ÕâÁ½ÕßÊDz»ÊÇ×öÁ˲¿·ÖͬÑùµÄ¹¤×÷ÄØ£¿ä¯ÀÀÆ÷Ò»¿ªÊ¼ÉèÖÃĬÈÏÑùʽ£¬È»ºóÄãÔÙÖØÐÂÉèÖóÉÄãµÄĬÈÏÑùʽ£¬Í¬Ê±ÉèÖÃÄã³£ÓõıêÇ©Ñùʽ£¬ÕâÑù(X)HTMLÔÚÑùʽÏÔʾ·½Ãæ×öµÄ¾ÍÊÇ×öÎÞÓù¦ÁË¡£

ÕâÑùÎÊÌâ¾Íתµ½(X)HTML±êÇ©ºÍËûµÄĬÈÏÑùʽÀ´ÁË£¬Ò»Ð©³£ÓõÄÒ³ÃæÄ£¿éÈçheader¡¢nav¡¢aside¡¢sectionÔ¤¼ÆÔÚHTML5Öлá³öÏÖרÓñêÇ©£¬ÕâÄܼõÉÙÔÚCSSÖÐ×Ô¶¨Òå³£ÓÃÄ£¿é£¬¶ø±êÇ©µÄĬÈÏÑùʽÎÊÌ⣬ȴºÜÉÙÓиüУ¬²»ÖªµÀÊÇΪÁ˼æ¹Ë¸÷ÖÖ²»Í¬µÄÓû§ÐèÇ󣬻¹ÊDZðµÄʲô¡£¡£¡£

Referrence:CSS Frameworks + CSS Reset: Design From Scratch
http://www.smashingmagazine.com/2007/09/21/css-frameworks-css-reset-design-from-scratch/
 
2008-01-14 12:38
¸üУ¨2008-04-09£©£ºÒÔǰµÄ°æ±¾ÖдæÔÚÍ϶¯Ä£¿éÖеÄÄÚÈݲ»¿ÉÑ¡µÄÎÊÌ⣬ԭÒòΪº¯ÊýFocusItºÍMoveItÖÐÅжÏʼþ¶ÔÏó²»ÊÇÄ¿±ê¶ÔÏóºóÓÃÁËreturn false¡£

ÍÏ×§µÄʵÏÖÆäʵͦ¼òµ¥µÄ£¬ÕâÀïµÄ¼òµ¥ÊÇʵÏÖÔ­ÀíµÄ¼òµ¥£¬ÀûÓÃÊó±êʼþ£ºmousedownËø¶¨Ä¿±ê£¬mousemoveÒÆ¶¯£¬mouseupÍ˳öÒÆ¶¯£¬ÉèÖÃÈ«¾Ö±äÁ¿Îª¿ª¹Ø¡££¨¿ÉÒÔÉèÖÃCookie´æÈ¡ÉÏÒ»´ÎµÄλÖÃ×ø±ê£©

ÅжÏÊÇ·ñ´æÔÚ¿ÉÓõÄCookie£¬ÈçÓУ¬¶ÁÈ¡ÉÏÒ»´ÎµÄÊý¾Ý²¢¶¨Î»¡£

Ëø¶¨Ä¿±ê¶ÔÏóÊǹؼü£¬Åжϵã»÷²¿Î»ÊÇ·ñÊÇ¿ÉÒÔÍÏ×§µÄ²¿Î»£¬Èç¹ûÊÇÉèÖÃÒÆ¶¯¶ÔÏóµÄposition£¬¼°ÆäleftºÍtop£¨Ò²¾ÍÊÇÏà¶ÔÓÚÍøÒ³µÄ×ø±ê£¬offsetLeftºÍoffsetTop£©£¬´ò¿ª¿ÉÒÔÒÆ¶¯µÄ¿ª¹Ø¡£

ÒÆ¶¯¶ÔÏó£¬ÈÃÒÆ¶¯¶ÔÏóÏà¶ÔÓÚÆÁĻԭµãµÄ×ø±êϵ£¬Ëæ×ÅÊó±êλÖõı仯¶øÒƶ¯£¨clientX ºÍclientY £©¡£

Í˳öÒÆ¶¯£¬¹Ø±Õ¿ÉÒÔÒÆ¶¯µÄ¿ª¹Ø£¬´æ´¢×ø±êλÖõÄCookie¡£

JavaScript

<script language="JavaScript" type="text/javascript">
<!--

window.onload = function(){
    drag("box","t");
}

function drag(el,bar){//elÎªÒªÒÆ¶¯µÄ¶ÔÏóµÄid£¬barΪ¿ÉÍÏ×§²¿Î»µÄclass

    var box=document.getElementById(el); //»ñµÃÍÏ×§¶ÔÏó
    var t=bar;//¶¨ÒåclassNameΪtµÄ²¿Î»²Å¿ÉÍÏ×§
    var ie=!!(window.attachEvent && !window.opera);//ÅжÏÊÇ·ñIE
    var par=false; // ÍÏ×§¶ÔÏóÊÇ·ñ¿ÉÒÔÒÆ¶¯µÄ¿ª¹Ø
    var elx, ely; // ÍÏ×§¶ÔÏóÔÚÒ³ÃæÉϵÄ×ø±ê
    var x,y; // ÍÏ×§¶ÔÏóÔÚÆÁÄ»ÉϵÄ×ø±ê

//Ò³ÃæÔØÈëʱ £¬Èç¹ûÓÐCookie ¶ÁÈ¡ ²¢ÉèÖóõʼλÖÃ
    var cleft = GetCookie("cleft");
    var ctop = GetCookie("ctop");
    if(cleft&&ctop){
        box.style.position = "absolute";
        box.style.left = cleft;
        box.style.top = ctop;
    }

    box.onmousedown = FocusIt; //ÍÏקǰԤ´¦Àí
    document.onmousemove = MoveIt; //ÍÏ×§
    document.onmouseup = ClearIt; //Çå³ýÍÏ×§

    function FocusIt(e){
        var target = ie ? event.srcElement : e.target;
        if(target.className==t){
            par = true;//´ò¿ª¿ª¹Ø
            box.style.position = "absolute";//ÈöÔÏó¾ø¶Ô¶¨Î»£¬¿ÉÒÔÔÚÆÁÄ»ÉÏÈÎÒâλÖóöÏÖ
            box.style.left = box.offsetLeft+"px";//»ñµÃÍÏ×§¶ÔÏóµÄµ±Ç°Ò³Ãæ×ø±ê£¨×îºó¼ÓµÄpxΪÁ˼æÈÝff£©
            box.style.top = box.offsetTop+"px";
            x= ie ? event.clientX : e.clientX;//»ñµÃÊó±êµÄµ±Ç°Ò³Ãæ×ø±ê
            y= ie ? event.clientY : e.clientY;
            elx = parseInt(box.style.left);//»ñµÃÍÏ×§¶ÔÏóµÄµ±Ç°Ò³Ãæ×ø±ê£¬²¢×ª»»ÎªÊý×Ö£¬ÓÃÓÚºóÃæµÄ¼ÆËã
            ely = parseInt(box.style.top);
        }           
    }

    function MoveIt(e){
    if (par){
        box.style.left = ie ? event.clientX + (elx - x) + "px" : e.clientX + (elx - x) + "px";
        box.style.top = ie ? event.clientY + (ely - y) + "px" : e.clientY + (ely - y) + "px";//ÈÃÍÏ×§¶ÔÏóÔÚÒ³ÃæµÄ×ø±êÏà¶ÔÓÚÊó±êµÄ×ø±êÒÆ¶¯
    }
    }

    function ClearIt(){   
        par = false;//¹Ø±Õ¿ª¹Ø
        SetCookie("cleft",box.style.left);//±£´æµ±Ç°Î»ÖÃ
        SetCookie("ctop",box.style.top);
    }

//Cookie
    function SetCookie(sName, sValue){
        document.cookie = sName + "=" + escape(sValue) + "; ";
    }
    function GetCookie(sName){
        var aCookie = document.cookie.split("; ");
        for (var i=0; i < aCookie.length; i++){
            var aCrumb = aCookie[i].split("=");
            if (sName == aCrumb[0])
            return unescape(aCrumb[1]);
        }
    }
}
//-->
</script>

CSS
<style type="text/css" media="screen">
<!--
#box{width: 250px;height:200px;border:1px solid #ccc;background: #fff;}
#box .t{height:20px;margin:0;padding:2px 4px;border-bottom:1px dashed #ddd;background: #f8f8f8;cursor: move;font:12px;color:#f83;}
#box .t:hover{background: #eee;border-bottom:1px dashed #fc0;}
-->
</style>

Html
<div id="box">
    <h3 class="t">title and drag Bar</h3>
    <div class="ct">content</div>
</div>
 
2007-12-11 18:38
ÄÚ´æÐ¹Â©£¬¾ÍÊÇÄÚ´æ²»Äܹ»±»ÕýÈ·µØÅäÖã¬ÄÚ´æ²»Äܼ°Ê±ÓÐЧ»ØÊÕ£¬Ëû»áµ¼Ö³ÌÐòÖ´ÐÐЧÂʽµµÍÉõÖÁÖ´ÐÐʧ°Ü¡£

ÔÚä¯ÀÀÆ÷ÁìÓò£¬´ó²¿·Ö¶¼¿ÉÄÜ»á³öÏÖÄÚ´æÐ¹Â©ÎÊÌ⣬µ«ÊÇÒÔIE×îΪ¶à¼û£¬Ò²×îΪÑÏÖØ£¬ÓÈÆäÊÇÒ³ÃæÖÐÓÐÐí¶àJavascriptµÄ½»»¥Ð§¹ûµÄʱºò¡£ÆäÖÐÉæ¼°µ½Ñ­»·½á¹¹£¨cyclic structure£©¡¢DOM¶ÔÏóÊôÐÔ¡¢JavaScript¶ÔÏóÊôÐÔÒÔ¼°À¬»ø»ØÊÕÆ÷£¨garbage collector£©¡£

Ñ­»·½á¹¹£¨cyclic structure£©£¬ÊÇÖ¸Ò»¸öDOM¶ÔÏó°üº¬JavaScript¶ÔÏó²ÎÊý£¨Ê¼þ´¦Àíº¯Êý£©£¬JavaScript¶ÔÏóÓÖ°üº¬ÁËDOM¶ÔÏóµÄÊôÐÔ²ÎÊý¡££¨±ÈÈç¸øÄ³¸ö³¬Á´½ÓAÌí¼ÓÒ»¸öonclickʼþº¯Êý£¬ÕâʱºòA¾ÍÓÐÁËÏàÓ¦µÄʼþ´¦Àíº¯Êý£¬¶øJavaScriptº¯Êý¶ÔÏóÖÐÒ²ÓÐÁËAµÄonclickÊôÐÔ£©¡£

µ±Ñ­»·½á¹¹£¨cyclic structure£©ÐγÉʱÈç¹ûûÓбðµÄ²ÎÊý´«µÝ¸øDOM¶ÔÏó»òÕßJavascriptº¯Êý¶ÔÏó£¬JavaScriptµÄÀ¬»ø»ØÊÕÆ÷£¨Ò»¸ö×Ô¶¯ÄÚ´æ¹ÜÀíÆ÷£©¾Í»á°ÑÕâÁ½¸ö¶ÔÏóµÄÄÚ´æÊͷŲ¢ÖØÐ½øÐÐÅäÖ㬵«ÊÇIEµÄDOM¶ÔÏóÊôÐÔ²ÎÊý²¢²»ÄÜÓÉJavaScript¹ÜÀíÇå³ý£¨²»ÄÜÇå³ýDOM¶ÔÏóµÄÊôÐÔ²ÎÊý£©£¬¶øËû×Ô¼ºµÄÄÚ´æ¹ÜÀí»úÖÆ²¢²»ÄÜÀí½âÑ­»·½á¹¹£¨cyclic structure£©µÄÀ¬»ø»ØÊÕ»úÖÆ¡£Òò´Ë£¬µ±Ñ­»·½á¹¹£¨cyclic structure£©µÄÀ¬»ø»ØÊÕÌõ¼þÐγÉʱ£¬IEÒ²²»ÄܽøÐÐÕýÈ·µÄÄÚ´æ»ØÊÕ¹ÜÀí£¬µ¼ÖÂÄÚ´æÐ¹Â©¡£µ±È»£¬ÕâÖ»ÓÐÔÚÑ­»·½á¹¹µÄδ»ØÊÕÄÚ´æµÄÊýÁ¿´ïµ½ºÜ´óµÄÊýÁ¿¼¶µÄʱºò£¬²Å»á³öÏÖÃ÷ÏÔµÄÄÚ´æÐ¹Â©Ö¢×´¡£

´ËÍ⣬ÓÉÓÚÑ­»·½á¹¹ÔÚ±Õ°üÖгöÏֵļ¸Âʽϴó£¬ÄÚ´æÐ¹Â©ÎÊÌâÒ²ÊDz»¿ÉºöÊӵġ£

½â¾öµÄ°ì·¨ÓУº

Ò»¡¢±ÜÃâÈÿÉÄܱ»ÒƳý»ò¸Ä±äµÄDOM¶ÔÏó£¨remove node/reset innerHTML£©ÖгöÏÖÑ­»·½á¹¹£¨cyclic structure£©£»

¶þ¡¢ÔÚDOM¶ÔÏó±»ÒƳýǰ£¨remove node/reset innerHTML£©Çå¿ÕËûµÄÊôÐÔ²ÎÊý£¨domNode.Jsfunction = null£©

1.±ÜÃâÀ©Õ¹DOM¶ÔÏóµÄÊôÐÔ²ÎÊý£¬Èç¹ûÓÐÒªÔÚÊʵ±µÄʱºòÇå¿Õ£»
2.Èç¹ûij¸öʼþ´¦Àíº¯ÊýÔÚÒÆ³ýºó¿ÉÄܱ»Ä³Ð©DOM¶ÔÏóµ÷Óã¬Ò»¶¨ÒªÇå¿Õ£»
3.AjaxÖÐXMLHttpRequestµÄonreadystatechangeʼþº¯Êýµ÷ÓÃÖ®ºóÒªÇå¡£
4....


ÒÔÉÏ´¿Êô¸öÈËÀí½â£¬´ó¼Ò×ÔÐбæ½â£¬Í¬Ê±»¹Íû¸÷λ¸ßÊÖ²»Áߴͽ̡£


¸½Ò»¸ö¿ÉÒÔÇå³ýij¸öDOM¶ÔÏó¼°Æä×ÓËï¶ÔÏóµÄʼþÊôÐԵĺ¯Êý
function purge(d) {
    var a = d.attributes;//È¡µÃDOM¶ÔÏóµÄËùÓÐʼþÊôÐÔ
    if (a) {
        var l = a.length;
        for ( var i = 0; i < l; i += 1) {
            var n = a[i].name;//È¡µÃDOM¶ÔÏóʼþÊôÐÔµÄÃû³ÆÈçonclick¡¢onblurµÈ
            if (typeof d[n] === 'function') {
                d[n] = null;//Çå¿ÕDOM¶ÔÏóʼþÊôÐÔµÄÖµ
            }
        }
    }
    a = d.childNodes;//´¦Àí×ÓÔªËØ
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            purge(d.childNodes[i]);
        }
}
}


Douglas Crockford: JScript Memory Leaks
http://www.crockford.com/javascript/memory/leak.html

Justin Rogers: Understanding and Solving Internet Explorer Leak Patterns
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/IETechCol/dnwebgen/ie_leak_patterns.asp
 
2007-11-26 17:18
¸øÄ³Ð©ÇøÓòµÄÔªËØ»òÅúÁ¿µÄÔªËØÌí¼Óʼþ£¬Ò»°ãÇé¿öÏÂÎÒÃÇͨ¹ýÑ­»·À´ÊµÏÖ£ºÏÈÕÒµ½ËùÓжÔÓ¦µÄÔªËØ£¬ÔÙ¸øËüÃÇÌí¼ÓÏàÓ¦µÄʼþ¡£

Èç¹ûѧϰһЩW3Cʼþ´¦ÀíģʽµÄ֪ʶ£¬¿ÉÒÔÕÒµ½ÁíÒ»ÖÖʵÏֵķ½·¨:ÀûÓÃʼþÕìÌý²ÎÊýe¡£

ÔÚW3Cʼþ´¦ÀíģʽÖУºËùÓÐͨ¹ýaddEvent¸ø½ÚµãÔªËØÌí¼ÓµÄʼþ´¦ÀíÆ÷¶¼»á¸ø¶ÔÓ¦µÄʼþÕìÌýº¯Êý´«»ØÒ»¸ö°üº¬e²ÎÊýµÄ¶ÔÏó£¬ÔÚä¯ÀÀÆ÷ÖÐÎÒÃÇ¿ÉÒÔÀûÓÃe.target£¨±ê×¼£©e.srcElement£¨IE£©À´È¡µÃʼþµÄÄ¿±êÔªËØ¡£
Ò»µ©´ËÔªËØµÄʼþ´¦ÀíÆ÷±»¼¤»î£¬´ËÔªËØµÄ¸¸ÔªËصÄËùÓÐʼþ´¦ÀíÆ÷Ò²»á±»¼¤»î£¬¼´Ã°ÅÝ£¬¿ÉÒÔͨ¹ýstopPropagation»òcancelBubbleÀ´È¡ÏûðÅÝ¡£

ÏÂÃæÊÇÀûÓôËÔ­Àí¶ÔFAQʵÀýÖØÐÂдµÄ´úÂë¡£

Javascript²¿·Ö£º
<script type="text/javascript">
<!--
window.onload = function(){
    var obj = document.getElementById("faq");
    if (!obj) return false;
        obj.onclick = function(e){//´«µÝʼþÕìÌý²ÎÊýe
            var e = e || window.event;//È¡µÃʼþÕìÌý²ÎÊýe
            var tg = e.target || e.srcElement; //È¡µÃʼþµÄÄ¿±êÔªËØ
            if(tg.tagName=="H3"){//È¡µÃÄ¿±ê¶ÔÏ󣺱êÌâ
                tg.className = tg.className == ""?"on":"";//ÉèÖñêÌâÑùʽ
                var tp = tg.parentNode.lastChild;//È¡µÃÕâ¸ö±êÌâÏà¶ÔÓ¦µÄÕýÎÄÄÚÈÝ£¨´ËÓï¾ä´æÓÐbug£ºÔÚff2ÖÐhtmlµÄ¸¸±êÇ©liÓë×Ó±êÇ©h3,pÖ®¼äÓпոñ»ò»ØÐÐʱ£©
                tp.style.display = tp.style.display == "none"?"block":"none";//ÏÔʾ»òÒþ²ØÕýÎÄ
            }
            if (window.event){//ÅжÏÊÇ·ñIE
                window.event.cancelBubble = true;//IE È¡ÏûðÅÝ£¨µã»÷³¬Á´½Óʱ²»´¥Æä¸¸ÔªËصÄʼþ£©
                //window.event.returnValue = false;//IE È¡ÏûĬÈÏÐÐΪ
            }
            else{
                e.stopPropagation();//È¡ÏûðÅÝ
                //e.preventDefault();//È¡ÏûĬÈÏÐÐΪ
            }
        }
}
//-->
</script>

Html²¿·Ö£º
<ul id="faq">
    <li><h3>headline<a href="http://www.baidu.com" target="_blank">search</a></h3>
        <p>paragraph paragraph paragraph</p></li>
    <li><h3>headline</h3>
        <p>paragraph paragraph paragraph</p></li>
    <li><h3>headline</h3>
        <p>paragraph paragraph paragraph</p></li>
</ul>

Css²¿·Ö£º
<style type="text/css" media="screen">
<!--
#faq{list-style:none;margin:0;padding:0;}
#faq h3{background:#ccc;margin:10px 0 0;padding:3px;font:14px/1.5em arial;border-top:2px solid #369;}
#faq h3.on{background:#ddd;}
#faq h3 a{float: right;margin:-1.8em 1em 0 0;}
#faq p{margin:0;padding:4px;font:12px/1.5em arial;background: #efefef;border-bottom:1px solid #369;}
-->
</style>

From DHTML to DOM scripting -- Christian Heilmann
http://icant.co.uk/articles/from-dhtml-to-dom/from-dhtml-to-dom-scripting.html#domtabs
 
   
 
 
ÎÄÕ·ÖÀà
 
   
 
ÎÄÕ´浵
 
     
 
×îÐÂÎÄÕÂÆÀÂÛ
  

»¹Ã»ÓÐѧ»áÔõÑùÖÆ×÷£¬
 

http://shop70589839.taobao.com/ רӪŷʽ¼Ò¾ß
 
 
 

ͦºÃ
   
°ïÖúÖÐÐÄ | ¿Õ¼ä¿Í·þ | Í¶ËßÖÐÐÄ | ¿Õ¼äЭÒé
©2012 Baidu