<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>西红柿爱番茄 &#187; show room</title>
	<atom:link href="http://www.ilovejs.net/archives/tag/show-room/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ilovejs.net</link>
	<description>到了创造为主的阶段，不忘继续学习</description>
	<lastBuildDate>Thu, 15 Dec 2011 06:18:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Javascript Show Room</title>
		<link>http://www.ilovejs.net/archives/151</link>
		<comments>http://www.ilovejs.net/archives/151#comments</comments>
		<pubDate>Mon, 04 Jan 2010 06:34:58 +0000</pubDate>
		<dc:creator>Supersha</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[show room]]></category>

		<guid isPermaLink="false">http://www.ilovejs.net/?p=151</guid>
		<description><![CDATA[/////////////// 2010-6-26 update ///////////////// 鉴于在添加DOM元素的style行内样式的时候有时候可能需要连续插入几个的需求，使用循环插入的方式可能会造成多次的reflow，故一次性的插入可能会好些，不过下面实现的需求比较单一，不能重复后续添加其他的style的属性值，除非重复设置。看具体需求而定吧： [javascript] var setStyle=function(elem,s){ var styles=[]; if(Object.prototype.toString.call(s) === &#34;[object Object]&#34;){ for(var k in s){ styles.push(k+&#34;:&#34;+s[k]); } &#8230; <a href="http://www.ilovejs.net/archives/151" class="more-link">了解更多</a>]]></description>
			<content:encoded><![CDATA[<p>
/////////////// <em>2010-6-26 update</em> /////////////////
</p>
<p>鉴于在添加DOM元素的style行内样式的时候有时候可能需要连续插入几个的需求，使用循环插入的方式可能会造成多次的reflow，故一次性的插入可能会好些，不过下面实现的需求比较单一，不能重复后续添加其他的style的属性值，除非重复设置。看具体需求而定吧：<br />
[javascript]<br />
var setStyle=function(elem,s){<br />
  var styles=[];<br />
  if(Object.prototype.toString.call(s) === &quot;[object Object]&quot;){<br />
    for(var k in s){<br />
	  styles.push(k+&quot;:&quot;+s[k]);<br />
	}<br />
	s=styles.join(&quot;;&quot;);<br />
  }<br />
  return elem.setAttribute(&quot;style&quot;,s) || (elem.style.cssText=s);<br />
}<br />
[/javascript]</p>
<p>
/////////////// <em>2010-6-20 update</em> /////////////////
</p>
<p>有时候为了实现去除数组重复项的需求，为此写了个小函数，效率也比较可观：<br />
[javascript]<br />
var pureMultilArray=function (arr){<br />
  var o={};<br />
  var a = [];<br />
  for(var i=0,l=arr.length;i &lt; l;i++){<br />
      !(arr[i] in o) &amp;&amp; a.push(arr[i]) &amp;&amp; (o[arr[i]]=&quot;&quot;);<br />
  }<br />
  return a;<br />
}<br />
[/javascript]</p>
<p>
/////////////// <em>2010-5-21 update</em> /////////////////
</p>
<p>
下面的extend函数是从<a  href="http://paularmstrongdesigns.com/projects/basejs/docs/">baseJS</a>库里面摘取的片段，觉得实现方式不错。本人对它进行了一点小修改：
</p>
<p>[javascript]<br />
var extend=function() {<br />
	var argu=arguments;<br />
    function ext(destination, source) {<br />
        for(var property in source) {<br />
            destination[property] = source[property];<br />
        }<br />
    }<br />
    if(argu.length == 2) {<br />
        ext(argu[0], argu[1])<br />
    } else {<br />
        var l = argu.length,i=l-1;<br />
        while(i) { ext(argu[0],argu[i--]);<br />
     }<br />
    }<br />
}<br />
//usage:<br />
extend(obj1,obj2,obj3,obj4); //all extend to obj1<br />
[/javascript]</p>
<p>
/////////////// <em>2010-5-14 update</em> /////////////////
</p>
<p>鉴于我们需要频繁的操作DOM元素的childNodes，所以编写了一个foreachChildNodes函数，参数depth表示需要处理的childNodes的深度，索引从1开始；参数fn是一个函数，带有每一个childNode的DOM元素作为参数，《<a  href="http://www.ilovejs.net/lab/foreachChildNodes.html">测试效果页面</a>》。同时附加上一个foreachAttributes函数作为操作DOM元素的属性：<br />
[javascript]<br />
var foreachChildNodes = function(el, fn, depth){<br />
    var nodes = el.childNodes;<br />
    depth = depth || 1;<br />
    var d = &#8211;depth;<br />
    for (var i = 0, l = nodes.length; i &lt; l; i++) {<br />
        var node = nodes[i];<br />
        if (d &gt; 0 &amp;&amp; node.childNodes.length &gt; 0) {<br />
            foreachChildNodes(node, fn, d);<br />
        }<br />
        if (node.nodeType === 1) {<br />
            fn(node);<br />
        }<br />
    }<br />
}<br />
//Usage:<br />
foreachChildNodes(document.getElementById(&quot;ul&quot;),function(el){<br />
  alert(el.innerHTML);<br />
},2);</p>
<p>var foreachAttributes = function(el, fn){<br />
    var attrs = el.attributes;<br />
    for (var i = 0, l = attrs.length; i &lt; l; i++) {<br />
        var attr = attrs[i];<br />
        fn(attr, attr.nodeValue);<br />
    }<br />
}<br />
[/javascript]</p>
<p>/////////////// <em>2010-3-8 update</em> /////////////////<br />
[javascript]<br />
var LoadJavascript=function(pattern){<br />
   pattern = pattern || &quot;Insert-DOM&quot;;<br />
   var loadPattern={<br />
      &quot;XHR-Eval&quot;:function(url,callback){<br />
	        url = url+&quot;?noCache=&quot;+(new Date()).getTime();<br />
           callback=callback || function(obj){};<br />
	        var xhr=false;<br />
			   if(window.XMLHttpRequest){<br />
			       xhr=new XMLHttpRequest();<br />
			   }else{<br />
			       try{<br />
				        xhr=new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);<br />
				    }catch(e){<br />
					     xhr = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);<br />
					 }<br />
			   }<br />
			   xhr.open(&quot;GET&quot;,url,true);<br />
			   xhr.onreadystatechange=function(){<br />
			       if(xhr.readyState === 4 &amp;&amp; ( xhr.status === 200 || xhr.status === 304)){<br />
				         eval(xhr.responseText);<br />
						    callback(xhr);<br />
					  }<br />
			   }<br />
xhr.send(null);<br />
	    },<br />
		&quot;XHR-Injection&quot;:function(url,callback){<br />
		      url = url+&quot;?noCache=&quot;+(new Date()).getTime();<br />
           callback=callback || function(obj){};<br />
	        var xhr=false;<br />
			   if(window.XMLHttpRequest){<br />
			       xhr=new XMLHttpRequest();<br />
			   }else{<br />
			       try{<br />
				        xhr=new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);<br />
				    }catch(e){<br />
					     xhr = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);<br />
					 }<br />
			   }<br />
			   xhr.open(&quot;GET&quot;,url,true);<br />
			   xhr.onreadystatechange=function(){<br />
			       if(xhr.readyState === 4 &amp;&amp; ( xhr.status === 200 || xhr.status === 304)){<br />
				        var script = document.createElement(&quot;script&quot;);<br />
						   document.getElementsByTagName(&quot;head&quot;)[0].appendChild(script);<br />
						   script.setAttribute(&quot;id&quot;,url.match(/\/(\w+)\.js/)[1]);<br />
						   script.setAttribute(&quot;type&quot;,&quot;text/javascript&quot;);<br />
						   script.text=xhr.responseText;<br />
						   callback(xhr);<br />
					  }<br />
			   }<br />
xhr.send(null);<br />
		},<br />
		&quot;Iframe&quot;:function(){<br />
		    var iframe=document.getElementById(&quot;iframe&quot;);<br />
			  document.body.appendChild(iframe);<br />
			  iframe.setAttribute(&quot;width&quot;,&quot;0&quot;);<br />
			  iframe.setAttribute(&quot;height&quot;,&quot;0&quot;);<br />
			  iframe.setAttribute(&quot;src&quot;,url);<br />
		},<br />
		&quot;Insert-DOM&quot;:function(url,callback){<br />
		    url = url+&quot;?noCache=&quot;+(new Date()).getTime();<br />
         callback=callback || function(obj){};<br />
		    var script=document.createElement(&quot;script&quot;);<br />
			  document.getElementsByTagName(&quot;head&quot;)[0].appendChild(script);<br />
			  script.setAttribute(&quot;id&quot;,url.match(/\/(\w+)\.js/)[1]);<br />
			  script.setAttribute(&quot;type&quot;,&quot;text/javascript&quot;);<br />
			  script.setAttribute(&quot;src&quot;,url);<br />
			  if(script.onreadystatechange){<br />
			     script.onreadystatechange=function(){<br />
				      if(script.status === &quot;loaded&quot; || script.status === &quot;complete&quot;){<br />
					        callback(script);<br />
					    }<br />
				   }<br />
			  }else{<br />
			     script.onload=function(){<br />
				       callback(script);<br />
				   }<br />
			  }<br />
		}<br />
   }<br />
   return loadPattern[pattern];<br />
}</p>
<p>//Usage:<br />
// LoadJavascript(&quot;XHR-Eval&quot;)(&quot;http://www.ilovejs.net/test.js&quot;);<br />
[/javascript]</p>
<p>/////////////// <em>2010-2-27 update</em> /////////////////<br />
[javascript]<br />
var getChildNodesBy = function(elem, method){<br />
    var childs = elem.childNodes;<br />
    var returnChilds = [];<br />
    for (var i = 0, len = childs.length; i &lt; len; i++) {<br />
        var child = childs[i];<br />
        if (method.call(child) &amp;&amp; child.nodeType === 1) {<br />
            returnChilds.push(child);<br />
        }<br />
    }<br />
    return returnChilds;<br />
}<br />
[/javascript]<br />
/////////////// <em>2010-2-26 update</em> /////////////////<br />
[javascript]<br />
var createElementWithName = function(tag, name){<br />
    try {<br />
        return elem = document.createElement(&#8216;&lt;&#8217; + tag + &#8216; name=&quot;&#8217; + name + &#8216;&quot;&gt;&lt;/&#8217; + tag + &#8216;&gt;&#8217;);<br />
    }<br />
    catch (e) {<br />
        elem = document.createElement(tag);<br />
        elem.setAttribute(&quot;name&quot;, name);<br />
    }<br />
    return elem;<br />
}<br />
[/javascript]</p>
<p>
/////////////// <em>2010-2-21 update</em> /////////////////
</p>
<p>[javascript]<br />
//得到一个由参数n指定长度的随机字符串，可以自定义种字符串seek。<br />
var randomString = function(n, seek){<br />
    seek = seek || &quot;0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;<br />
    var rand = &quot;&quot;;<br />
    var l = seek.length;<br />
    for (var i = 0; i &lt; n; i++) {<br />
        rand += seek[Math.floor(Math.random() * l)];<br />
    }<br />
    return rand;<br />
}<br />
[/javascript]</p>
<p>
///////////////////////////////////////////////////////////////////
</p>
<p>
喜欢show和read代码的你是否愿意展示自己平时积累的认为自豪的代码片段呢？来吧，在这里展示一下你的code的特色，比拼一下，狠批一下，臭骂一下，鄙视一下吧，不要吝啬你的代码。
</p>
<p><span id="more-151"></span><br />
本人先入为主，下面是我平时记录的关于Event和Dom操作的一些功能函数，限于时间，就先展示一下这些吧，后续更新……<br />
[javascript]<br />
;(function(global){<br />
    global.LIB = global.LIB || {};<br />
    /*<br />
     * Static method :namespace,it is to make a namspace under the LIB.<br />
     */<br />
    LIB.namespace = function(ns){<br />
        var names = ns &amp;&amp; typeof ns.split === &quot;function&quot; &amp;&amp; ns.split(&quot;.&quot;);<br />
        var current = LIB;<br />
        for (var i = 0, l = names.length; i &lt; l; i++) {<br />
            if (!current[names[i]]) {<br />
                current[names[i]] = {};<br />
            }<br />
            current = current[names[i]];<br />
        }<br />
    }</p>
<p>    /*<br />
     * LIB.util.Event space:it is all about the event method.<br />
     */<br />
    LIB.namespace(&quot;util.Event&quot;);<br />
    var E = LIB.util.Event;<br />
    /*<br />
     * addListener: add Event to a DOM Element.use the Lazy Definition Pattern<br />
     */<br />
    E.addListener = function(el, type, handle){<br />
        E.addListener = (function(){<br />
            if (el.addEventListener) {<br />
                return function(el, type, handle){<br />
                    el.addEventListener(type, handle, false);<br />
                }<br />
            } else if (el.attachEvent) {<br />
                return function(el, type, handle){<br />
                    el.attachEvent(&quot;on&quot; + type, function(e){<br />
                        handle.call(el, e);<br />
                    });<br />
                }<br />
            } else {<br />
                return function(el, type, handle){<br />
                    el[&quot;on&quot; + type] = handle;<br />
                }<br />
            }<br />
        })();<br />
        E.addListener(el, type, handle);<br />
    };<br />
    /*<br />
     * LIB.util.Event.on:it is the same to addListener<br />
     */<br />
    E.on = E.addListener;<br />
    /*<br />
     * removeListener:remove Event from a DOM Element,use the Lazy Definition Pattern<br />
     */<br />
    E.removeListener = function(el, type, handle){<br />
        E.removeListener = (function(){<br />
            if (el.removeEventListener) {<br />
                return function(el, type, handle){<br />
                    el.removeEventListener(type, handle, false);<br />
                }<br />
            } else if (el.detachEvent) {<br />
                return function(el, type, handle){<br />
                    el.detachEvent(&quot;on&quot; + type, handle);<br />
                }<br />
            } else {<br />
                return function(el, type){<br />
                    el[&quot;on&quot; + type] = null;<br />
                }<br />
            }<br />
        })();<br />
        E.removeListener(el, type, handle);<br />
    }<br />
    /*<br />
     * LIB.util.Event.unon:it is the same with removeListener<br />
     */<br />
    E.unon = E.removeListener;<br />
    /*<br />
     * LIB.util.Event.hover:it is similar with jQuery&#8217;s hover method<br />
     */<br />
    E.hover = function(el, h_over, h_out){<br />
        E.on(el, &quot;mouseover&quot;, h_over);<br />
        E.on(el, &quot;mouseout&quot;, h_out);<br />
    }<br />
    /*<br />
     * LIB.util.Event.toggle:Loop to execute the functon&#8217;s params<br />
     */<br />
    E.toggle = function(el){<br />
        var i = 1, a = arguments;<br />
        el[&quot;onclick&quot;] = function(e){<br />
            (a[i++]).call(el, e); //执行从第二个参数开始的函数<br />
            if (i === a.length) { //如果到了参数末尾，重新开始执行<br />
                i = 1;<br />
            }<br />
        }<br />
    }<br />
    /*<br />
     * LIB.util.Event.one: Excute only once.<br />
     */<br />
    E.one = function(el, type, handle){<br />
        el[&quot;on&quot; + type] = function(e){<br />
            handle.call(el, e);<br />
            el[&quot;on&quot; + type] = null;<br />
        }<br />
    }<br />
    /*<br />
     * LIB.util.Event.onDOMReady:execute the code while DOM is able to use once.<br />
     */<br />
    E.onDOMReady = function(fn){<br />
        (function(){<br />
            if (document &amp;&amp; document.getElementsByTagName &amp;&amp; document.getElementById &amp;&amp; document.body) {<br />
                fn();<br />
            } else {<br />
                //利用arguments.callee获取匿名函数的引用，之后在setTimeout定时器里循环执行<br />
                setTimeout(arguments.callee, 20);<br />
            }<br />
        })();<br />
    }<br />
    /*<br />
     * LIB.util.Event.onAvailable:it is similar to YUI&#8217;s onAvailable event.<br />
     * onAvailable(id,fn,scope);<br />
     */<br />
    E.onAvailable = function(id, fn, scope){<br />
        (function(){<br />
            var el = document.getElementById(id);<br />
            if (el == undefined) {<br />
                setTimeout(arguments.callee, 20);<br />
            } else {<br />
                //将要调用的函数的上下文是scope，默认是当前指定id的DOM Element<br />
                fn.call(scope || el);<br />
            }<br />
        })();<br />
    }<br />
    /*<br />
     * LIB.util.Event.onContentReady:it is similar to YUI&#8217;s onContentReady event.<br />
     */<br />
    E.onContentReady = function(id, fn, scope){<br />
        (function(){<br />
            var el = document.getElementById(id);<br />
            if (!(el &amp;&amp; el.nextSibling)) {<br />
                setTimeout(arguments.callee, 20);<br />
            } else {<br />
                fn.call(scope || el);<br />
            }<br />
        })();<br />
    }<br />
    /*<br />
     * LIB.util.Event.preventDefault:prevent the default behavior of a DOM element.<br />
     */<br />
    E.preventDefault = function(ev){<br />
        if (ev &amp;&amp; ev.preventDefault) {<br />
            ev.preventDefault();<br />
        } else {<br />
            window.event.returnValue = false;<br />
        }<br />
        return false;<br />
    }<br />
    /*<br />
     * LIB.util.Event.stopPropagation:stop the event&#8217;s bubble.<br />
     */<br />
    E.stopPropagation = function(ev){<br />
        if (ev &amp;&amp; ev.stopPropagation) {<br />
            ev.stopPropagation();<br />
        } else {<br />
            window.event.cancelBubble = true;<br />
        }<br />
    }<br />
    /*<br />
     * LIB.util.Event.stopEvent:it is similar to YUI&#8217;s stopEvent method.<br />
     */<br />
    E.stopEvent = function(ev){<br />
        E.preventDefault(ev);<br />
        E.stopPropagation(ev);<br />
    }</p>
<p>    ///////////////////////////////////////////////////////<br />
    /*<br />
     * LIB.util.Dom:All about how to operate DOM Element.<br />
     */<br />
    LIB.namespace(&quot;util.Dom&quot;);<br />
    var D = LIB.util.Dom;</p>
<p>    //Get NodeList by tagName<br />
    D.getElementsByTagName = function(tag, parent){<br />
        return (parent || document).getElementsByTagName(tag || &quot;*&quot;);<br />
    }</p>
<p>    //添加对原生getElementsByClassName的支持<br />
    //get NodeList by className<br />
    D.getElementsByClassName = function(classname, tag, parent){<br />
        if (document.getElementsByClassName &amp;&amp; Array.filter) {<br />
            return Array.filter((parent || document).getElementsByClassName(classname), function(el){<br />
                return tag ? el.nodeName.toLowerCase() == tag : true;<br />
            });<br />
        } else {<br />
           var elems = (parent || document).getElementsByTagName(tag),<br />
                reg = new RegExp(&quot;\\b&quot; + classname + &quot;\\b&quot;),<br />
		nodes = [],<br />
		cn=&quot;&quot;;<br />
           for (var i = 0,l=elems.length;i&lt;l;i++) {<br />
	       cn=elems[i].className;<br />
	       if(!cn) continue;<br />
               if (reg.test(cn)) {<br />
                  nodes.push(elems[i]);<br />
              }<br />
          }<br />
          return nodes;<br />
       }<br />
    }<br />
    //Create a new DOM Element<br />
    D.create = function(tag){<br />
        return document.createElement(tag);<br />
    }<br />
    //return DOM Element&#8217;s innerhtml<br />
    D.html = function(el){<br />
        return el.innerHTML;<br />
    }<br />
    //return DOM Element&#8217;s inner text<br />
    D.text = function(el){<br />
        return this.html(el).replace(/&lt;[\/]?[^&gt;]+&gt;/gi,&quot;&quot;);<br />
    }<br />
    //return DOM Element&#8217;s html,include itself<br />
    D.outerHTML = function(el){<br />
        var wrap = D.create(&quot;div&quot;), html;<br />
        wrap.appendChild(el);<br />
        html = wrap.innerHTML;<br />
        wrap = null;<br />
        return html;<br />
    }<br />
    //return the next Element of the current Element;<br />
    D.nextSibling = function(el){<br />
        var next = el.nextSibling;<br />
        while (next.nodeType !== 1) {<br />
            next = next.nextSibling;<br />
        }<br />
        return next;<br />
    }<br />
    //return the previousSibling Element of the current Element<br />
    D.previousSibling = function(el){<br />
        var pre = el.previousSibling;<br />
        while (pre.nodeType !== 1) {<br />
            pre = pre.previousSibling;<br />
        }<br />
        return pre;<br />
    }<br />
    //return the first child of a DOM Element<br />
    D.firstChild = function(el){<br />
        var first;<br />
        while (first.nodeType !== 1) {<br />
            first = first.nextSibling;<br />
        }<br />
        return child;<br />
    }<br />
    //return the last child of a DOM Element<br />
    D.lastChild = function(el){<br />
        var last = el.lastChild;<br />
        while (last.nodeType !== 1) {<br />
            last = last.previousSibling;<br />
        }<br />
        return last;<br />
    }<br />
    //return the DOM Element&#8217;s parentNode<br />
    D.parentNode = function(el){<br />
        return el.parentNode;<br />
    }<br />
    //Weather have a className<br />
    D.hasClass = function(el, classname){<br />
        return new RegExp(&quot;\\b&quot; + classname + &quot;\\b\\s*&quot;, &quot;g&quot;).test(el.className);<br />
    }<br />
    //add a className to a DOM Element<br />
    D.addClass = function(el, classname){<br />
        var c = el.className;<br />
        el.className = c === &quot;&quot; ? classname : c + &quot; &quot; + classname;<br />
    }<br />
    //remove a className from a DOM Element<br />
    D.removeClass = function(el, classname){<br />
        var reg = new RegExp(&quot;\\b&quot; + classname + &quot;\\b\\s*&quot;, &quot;g&quot;);<br />
        el.className = el.className.replace(reg, &quot;&quot;);<br />
    }<br />
    //get DOM Elements&#8217;s reference by id<br />
    //Example: LIB.util.Dom.get(&quot;div&quot;[,&quot;test&quot;..])<br />
    D.get = function(){<br />
        var a = arguments, elems = [];<br />
        for (var i = 0, l = a.length; i &lt; l; i++) {<br />
            var el = a[i];<br />
            if (typeof el === &quot;object&quot;) {<br />
                elems.push(el);<br />
            } else if (typeof el === &quot;string&quot;) {<br />
                elems.push(document.getElementById(el));<br />
            }<br />
        }<br />
        return elems.length === 1 ? elems[0] : elems;<br />
    }<br />
    //get the DOM Element&#8217;s direction children,不算文本节点<br />
    D.getChildren = function(el){<br />
        var childs = el.childNodes, returnChilds = [];<br />
        var current;<br />
        for (var i = 0; current = childs[i++];) {<br />
            //解决FF下空白节点问题<br />
            if (current.nodeType === 1) {<br />
                returnChilds.push(current);<br />
            }<br />
        }<br />
        return returnChilds;<br />
    }<br />
	//setStyle:it is similar to YUI&#8217;s setStyle method<br />
	D.setStyle=function(el,attr,value){<br />
		//将“font-size”这样的形式转化为“fontSize”的形式。<br />
		attr=attr.replace(/-(\w)/,function(m,p){return p.toUpperCase();});<br />
		el.style[attr]=value;<br />
	}<br />
	//getStyle:it is similar to YUI&#8217;s getStyle method<br />
	D.getStyle=function(el,attr){<br />
		attr=attr.replace(/-(\w)/,function(m,p){return p.toUpperCase();});<br />
		return el.style[attr];<br />
	}<br />
})(this);<br />
[/javascript]</p>
<p>
<strong>2010-01-04 18:34:50 更新 code</strong>
</p>
<p>[javascript]<br />
    //getComputedStyle:获取DOM Element的最终样式<br />
    //注意：样式属性的书写格式必须是骆驼型，比如:font-size要写成fontSize<br />
    D.getFinalStyle = function(el, attr){<br />
        if (el.currentStyle) { //IE<br />
            return el.currentStyle[attr];<br />
        } else if (window.getComputedStyle) { //W3C<br />
            return window.getComputedStyle(el, null)[attr];<br />
        } else {<br />
            return el.style[attr];<br />
        }<br />
    }<br />
    //height:get a DOM Element&#8217;s really height,include a element&#8217;s display to ve set &#8216;none&#8217;<br />
    D.height = function(el){<br />
		//首先判断DOM Element是否隐藏<br />
        if (this.getComputedStyle(el, &quot;display&quot;) !== &quot;none&quot;) {<br />
            return el.offsetHeight || el.clientHeight;<br />
        } else {<br />
            //获取隐藏掉的函数的高度，先让它显示，获取到高度之后再隐藏，下同<br />
            el.style.display = &quot;block&quot;;<br />
            var h = el.offsetHeight || el.clientHeight;<br />
            el.style.display = &quot;none&quot;;<br />
            return h;<br />
        }<br />
    }<br />
    //width:get a DOM Element&#8217;s really width,include a element&#8217;s display to ve set &#8216;none&#8217;<br />
    D.width = function(el){<br />
        if (this.getComputedStyle(el, &quot;display&quot;) !== &quot;none&quot;) {<br />
            return el.offsetWidth || el.clientWidth;<br />
        } else {<br />
            el.style.display = &quot;block&quot;;<br />
            var w = el.offsetWidth || el.clientWidth;<br />
            el.style.display = &quot;none&quot;;<br />
            return w;<br />
        }<br />
    }<br />
	//toggleClass:如果DOM Element中有了指定的css类，则删除，反之则添加<br />
	D.toggleClass=function(el,classname){<br />
		if(this.hasClass(el,classname)){<br />
			this.removeClass(el,classname);<br />
		}else{<br />
			this.addClass(el,classname);<br />
		}<br />
	}<br />
[/javascript]</p>
<p>
<strong>2010-01-05 11:22:09 更新 code</strong>
</p>
<p>[javascript]<br />
	//getAttribute:获取DOM Element指定的属性<br />
    D.getAttribute=function(el,attr){<br />
		//使用getAttributeNode方法能直接使用‘class’，‘for’来取得属性值<br />
		return attr === &quot;href&quot; ? el.getAttribute(&quot;href&quot;,2) : el.getAttributeNode(attr).value;<br />
	}<br />
	//setAttribute:设置DOM Element指定的属性<br />
	D.setAttribute=function(el,attr,value){<br />
		attr={&quot;class&quot;:&quot;className&quot;,&quot;for&quot;:&quot;htmlFor&quot;}[attr] || attr;<br />
		try {<br />
			el[attr] = value;<br />
		}catch(e){<br />
			el.setAttribute(attr,value);<br />
		}<br />
	}<br />
	//stringToDOM:将一个HTML形式的字符串或者纯内容的字符串转化为DOM Element‘s reference<br />
	D.stringToDOM=function(str){<br />
		if(typeof str === &quot;object&quot;) return;<br />
		var div=this.create(&quot;div&quot;),elems=[];<br />
		div.innerHTML=str;<br />
		try{<br />
			var node=div.firstChild;<br />
			while(node){<br />
				elems.push(node);<br />
				node=node.nextSibling;<br />
			}<br />
			return elems.length === 1 ? elems[0] : elems;<br />
		}finally{<br />
			div=null;<br />
		}<br />
	}<br />
	//insertAfter:将一个DOM Element插入到另外一个DOM Element的后面<br />
	D.insertAfter=function(newNode,refNode){<br />
		var next=this.nextSibling(refNode);<br />
		if(next){<br />
			refNode.parentNode.insertBefore(newNode,next);<br />
		}else{<br />
			refNode.parentNode.appendChild(newNode);<br />
		}<br />
		return newNode;<br />
	}<br />
	//prepend:将一个DOM Element插入到某个DOM Element的前面<br />
	D.prepend=function(newNode,parent){<br />
		var first=parent.firstChild;<br />
		if(first){<br />
			parent.insertBefore(newNode,first);<br />
		}else{<br />
			parent.appendChild(newNode);<br />
		}<br />
	}<br />
[/javascript]</p>
<p>
<strong>2010-01-05 14:03:22 更新 code</strong>
</p>
<p>[javascript]<br />
	//wrap:将一个DOM Element被包含于另外一个DOM Element<br />
	//引入的wrap可以是一个HTML字符串，也可以是一个DOM Element&#8217;s reference.<br />
	//如果是HTML字符串的话，建议是从一个父元素开始，eg：&quot;&lt;div class=&#8217;test&#8217;&gt;&lt;/div&gt;&quot; 等等<br />
	D.wrap=function(node,wrapNode){<br />
		if(typeof wrapNode === &quot;string&quot;){<br />
			wrapNode=this.stringToDOM(wrapNode);<br />
			node.parentNode.insertBefore(wrapNode,node);<br />
			wrapNode.appendChild(node);<br />
		}else{<br />
			wrapNode.appendChild(node);<br />
		}<br />
		return wrapNode;<br />
	}<br />
[/javascript]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ilovejs.net/archives/151/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

