<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>bazhuang</title>
    <description></description>
    <link>http://bazhuang.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>0等于空字符串的问题</title>
        <author>bazhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bazhuang.javaeye.com">bazhuang</a>&nbsp;
          链接：<a href="http://bazhuang.javaeye.com/blog/201074" style="color:red;">http://bazhuang.javaeye.com/blog/201074</a>&nbsp;
          发表时间: 2008年06月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天碰到了一个非常郁闷的问题，本来是想实现一个类似于java里面那个StringUtils.isEmpty的，可最后发现在js中0==""这里给我返回了true，怎么都想不通。<br />最后只能是改为下面这个样子了，先把str转换为一个字符串，不让数字参与比较了。<br /><pre name="code" class="js">
/**
 * 判断是否为字符串是否为空
 * @param {Object} str
 */
isEmpty = function(str){
	if(!ZERO.isValid(str)){
		return true;
	}
	
	var val = String(str);
	if( val=="" ){
		return true;
	}
	return false;
}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://bazhuang.javaeye.com/blog/201074#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 06 Jun 2008 22:42:17 +0800</pubDate>
        <link>http://bazhuang.javaeye.com/blog/201074</link>
        <guid>http://bazhuang.javaeye.com/blog/201074</guid>
      </item>
      <item>
        <title>面试总结</title>
        <author>bazhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bazhuang.javaeye.com">bazhuang</a>&nbsp;
          链接：<a href="http://bazhuang.javaeye.com/blog/197175" style="color:red;">http://bazhuang.javaeye.com/blog/197175</a>&nbsp;
          发表时间: 2008年05月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          问：为什么在jsp中会出现request，response，session等等默认对象？<br />答：因为http是个无状态tcp/ip协议。<br /><br />问：有一个图，上面是一个class，extends一个class，implements另一个class，问这个是什么设计模式？<br />答：Template模式。<br /><br />这个是今天面试时候的2个问题，这个面试官的答案。<br /><br />经过最近一段时间的面试，才觉得自己在设计模式，EJB，hibernate这些方面的知识太欠缺了。接下来这半年就主要抓一下设计模式以及hibernate吧，至于EJB就算了。
          <br/>
          <span style="color:red;">
            <a href="http://bazhuang.javaeye.com/blog/197175#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 26 May 2008 19:18:28 +0800</pubDate>
        <link>http://bazhuang.javaeye.com/blog/197175</link>
        <guid>http://bazhuang.javaeye.com/blog/197175</guid>
      </item>
      <item>
        <title>职业生涯错过的最遗憾的公司</title>
        <author>bazhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bazhuang.javaeye.com">bazhuang</a>&nbsp;
          链接：<a href="http://bazhuang.javaeye.com/blog/196725" style="color:red;">http://bazhuang.javaeye.com/blog/196725</a>&nbsp;
          发表时间: 2008年05月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          从毕业到现在也差不多4年了，说实在的曾经呆过的公司都算不上好，至少当时如果这些公司不要我的话，我也不会感到遗憾。<br /><br />可有2个公司拒绝我，我就感到很心痛。<br /><br />第一个公司是“无锡合勤”，具体的公司名称就记不起来了，这个公司提供的工作岗位应该是和我的专业最接近的了。可以它当时要了我的一个同学，而我被鄙视了。如果被它录用的话，一定会改变我的职业生涯了，我估计也不会从事软件开发了。<br /><br />第二个公司就是最近面试的“土豆网”了，经过了3轮面试，最终还是很遗憾的无法去土豆工作，其实我很喜欢土豆的环境。估计正好印证了那句话“希望越大，失望也越大”。这是我面试以来感到最可惜的一次经历了。都到最后一轮了，还是没有通过hr那关，我也不知道是什么原因。永远也不会知道是什么原因。<br /><br />其他没有去成的公司，要么是我的水平不够，要么就是我看不上这样的公司，基本上都没有特别遗憾的了。就算是积累面试经历了。<br /><br />整个职业生涯估计就是在拒与被拒之间徘徊，不过还是希望可以找个自己中意的公司呆一辈子。<br /><br />上面算是对最近的面试经历做一番感慨吧。拍拍身上的灰尘，前面的路还很长。
          <br/>
          <span style="color:red;">
            <a href="http://bazhuang.javaeye.com/blog/196725#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 25 May 2008 17:16:46 +0800</pubDate>
        <link>http://bazhuang.javaeye.com/blog/196725</link>
        <guid>http://bazhuang.javaeye.com/blog/196725</guid>
      </item>
      <item>
        <title>js中创建Object对象的性能分析</title>
        <author>bazhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bazhuang.javaeye.com">bazhuang</a>&nbsp;
          链接：<a href="http://bazhuang.javaeye.com/blog/190310" style="color:red;">http://bazhuang.javaeye.com/blog/190310</a>&nbsp;
          发表时间: 2008年05月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在javascript中创建一个对象有以下几种方式，如下：<br />1、<pre name="code" class="java">
var obj = new Object();
obj.id=1;
obj.name="test";
obj.callFunc=function(){
	alert("callFunc");
}
</pre><br />2、<pre name="code" class="java">
var obj = {};
obj.id=1;
obj.name="test";
obj.callFunc=function(){
	alert("callFunc");
}
</pre><br />3、<pre name="code" class="java">
var obj = {
	id:1,
	name:"test",
	callFunc:function(){
			alert("callFunc");
		}
	};
</pre><br />那这3种方式各自的性能怎样呢，下面通过一段代码进行分析：<br /><pre name="code" class="java">
  &lt;script>
  var start = new Date();
  for (var i=0;i&lt;100000 ;i++ )
  {
	var obj = new Object();
	obj.id=i;
	obj.name="test";
	obj.callFunc=function(){
		alert("callFunc");
	}
  }
  
  document.write(""+(new Date() - start)+"ms");
  document.write("&lt;br/>");
  
  start = new Date();

  for (var i=0;i&lt;100000 ;i++ )
  {
	var obj = {};
	obj.id=i;
	obj.name="test";
	obj.callFunc=function(){
		alert("callFunc");
	}
  }
  document.write(""+(new Date() - start)+"ms");
  document.write("&lt;br/>");
  

	start = new Date();
  for (var i=0;i&lt;100000 ;i++ )
  {
	var obj = {
	id:i,
	name:"test",
	callFunc:function(){
			alert("callFunc");
		}
	};
  }
  document.write(""+(new Date() - start)+"ms");
  
  &lt;/script>
</pre><br />当然这里每次执行的结果有一定的差别，但差别不会很大，我这里某一次运行的结果如下：<br />1078ms<br />938ms<br />812ms <br />这里可以说，第一种方法创建对象是效率最低的，第二种方式居中，第三种方式最快，但这种效率只有在对象的属性特别多，或者创建的对象特别多的时候才可以看出来。<br /><br />这个执行效率和对象的多少以及对象属性的多少有关系，代码如下：<br /><pre name="code" class="java">
   &lt;script>
  var start = new Date();

  for (var i=0;i&lt;5000 ;i++ )
  {
	var obj = {
	id:i,
	name:"test",
	callFunc:function(){
			alert("callFunc");
		}
	,
	callFunc2:function(){
			alert("callFunc2");
		}
	,
	callFunc3:function(){
			alert("callFunc3");
		}
	,
	callFunc4:function(){
			alert("callFunc4");
		}
	}
  }
  document.write(""+(new Date() - start)+"ms");
  document.write("&lt;br/>");
  

	start = new Date();
  for (var i=0;i&lt;10000 ;i++ )
  {
	var obj = {
	id:i,
	name:"test",
	callFunc:function(){
			alert("callFunc");
		}
	};
  }
  document.write(""+(new Date() - start)+"ms");
  
  &lt;/script>
</pre><br />140ms<br />63ms <br />上面这段代码同样可以看出，虽然都是采用相同的第三种办法来创建对象，但由于第一段代码中的属性有6个（function也算属性的一种），执行5000次，而第二段代码属性为3个，执行10000次，显然第一段代码的效率明显要慢。<br /><br />在我们自己写js代码的时候，尽量使用var obj = {};这种方式去创建代码，既可以节省空间，也有利于提高性能。还有就是定义尽可能少的属性。
          <br/>
          <span style="color:red;">
            <a href="http://bazhuang.javaeye.com/blog/190310#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 06 May 2008 17:20:51 +0800</pubDate>
        <link>http://bazhuang.javaeye.com/blog/190310</link>
        <guid>http://bazhuang.javaeye.com/blog/190310</guid>
      </item>
      <item>
        <title>利用digester来将xml转换为bean</title>
        <author>bazhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bazhuang.javaeye.com">bazhuang</a>&nbsp;
          链接：<a href="http://bazhuang.javaeye.com/blog/188518" style="color:red;">http://bazhuang.javaeye.com/blog/188518</a>&nbsp;
          发表时间: 2008年04月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          org.apache.commons.digester这个包提供了一个工具，可以很迅速的将一个xml文件转换为一个bean。<br />下面的这个例子，包括有2个bean文件，一个xml文件，一个java主处理文件。<br />2个bean的代码如下：<br /><pre name="code" class="java">package test.digester;
import java.util.ArrayList;
import java.util.List;

public class Foo {
	private List&lt;Bar> bars;
	private String name;
	
	public void addBar(Bar bar){
		if (bars==null){
			bars = new ArrayList&lt;Bar>();
		}
		bars.add(bar);
	}
	
	public List getBars() {
		return bars;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public String toString(){
		String str = "";
		str = "name=" + getName() + ";";
		List list = getBars();
		if (list==null){
			return str;
		}
		int len = list.size();
		String bar = "";
		for(int i=0;i&lt;len;i++){
			Bar b = (Bar)getBars().get(i);
			bar = bar + "{"+b.toString()+"},";
		}
		if (bar.length()>0){
			str = str + "["+bar.substring(0, bar.length() - 1)+"]";
		}
		return str;
	}
}</pre><br /><pre name="code" class="java">
package test.digester;

public class Bar {
	private String id;

	private String title;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String toString(){
		String str = "";
		str = "id="+getId()+";title="+getTitle()+";";
		return str;
	}
}
</pre><br />这个2个bean中的toString方法，我是为了能够方便的看出转换后的内容是否正确而添加的。<br />还有一个xml文件也是放在包test.digester中，内容如下：<br /><pre name="code" class="java">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;foo name="The Parent">
  &lt;bar id="123" title="The First Child"/>
  &lt;bar id="456" title="The Second Child"/>
  &lt;bar id="789" title="测试"/>
&lt;/foo></pre><br />最后就是这个主处理文件：<br />代码如下：<br /><pre name="code" class="java">
package test.digester;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;

import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;

public class DigesterTest {
	private Digester digester;
	
	private static String filepath = "test/digester/test.xml";
	
	public DigesterTest(){
		this.init();
	}
	
	private void init(){
		digester = new Digester();
		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
		URL url = classLoader.getResource(filepath);
		Foo foo = new Foo();
		digester.setValidating(false);
		digester.push(foo);
		digester.addSetProperties("foo");
		digester.addObjectCreate("foo/bar", "test.digester.Bar");
		digester.addSetProperties("foo/bar");
		digester.addSetNext("foo/bar", "addBar", "test.digester.Bar");
		try{
			digester.parse(url);
			System.out.println(foo);
		}
		catch(IOException e){
			System.out.println(e);
		}
		catch(SAXException e){
			System.out.println(e);
		}

	}
	
	public static void main(String[] args){
		DigesterTest test = new DigesterTest();
	}
}
</pre><br />这里的init方法也是可以写成：<br /><pre name="code" class="java">
		digester = new Digester();
		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
		URL url = classLoader.getResource(filepath);
		digester.setValidating(false);
		digester.addObjectCreate("foo", "test.digester.Foo");
		digester.addSetProperties("foo");
		digester.addObjectCreate("foo/bar", "test.digester.Bar");
		digester.addSetProperties("foo/bar");
		digester.addSetNext("foo/bar", "addBar", "test.digester.Bar");
		try{
			Foo foo = (Foo)digester.parse(url);
			System.out.println(foo);
		}
		catch(IOException e){
			System.out.println(e);
		}
		catch(SAXException e){
			System.out.println(e);
		}
</pre><br />第一种是先new一个Foo，然后把这个Foo对象push到digester中去，最后在parse转换之后，直接处理这个Foo对象就可以了。<br />第二种方式是digester.addObjectCreate("foo", "test.digester.Foo");就是将Foo类的name传入，在parse中就会根据这个名字转换得到一个Foo对象，我们只要把返回结果转换为Foo就OK了。<br />在Struts1.3.9中作者是采用的push方法的，digester中还有其他的处理方法的，需要的时候可以自己找资料研究一下。
          <br/>
          <span style="color:red;">
            <a href="http://bazhuang.javaeye.com/blog/188518#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Apr 2008 18:31:38 +0800</pubDate>
        <link>http://bazhuang.javaeye.com/blog/188518</link>
        <guid>http://bazhuang.javaeye.com/blog/188518</guid>
      </item>
      <item>
        <title>屏蔽dom的上级节点的事件</title>
        <author>bazhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bazhuang.javaeye.com">bazhuang</a>&nbsp;
          链接：<a href="http://bazhuang.javaeye.com/blog/163011" style="color:red;">http://bazhuang.javaeye.com/blog/163011</a>&nbsp;
          发表时间: 2008年02月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          由于网页中的节点会继承上级节点的事件，可有时候这个事件继承并不是我们需要的，所以就需要对它进行屏蔽，一般我们写上event.cancelBubble=true;就可以解决了，但这个并不一定适用于所有事件以及适应大部分浏览器。<br />下面的这个方法就可以解决这个问题，代码如下：<br />以下是html代码：<br /><pre name="code" class="java">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
&lt;html xmlns="http://www.w3.org/1999/xhtml">
 &lt;head>
  &lt;title> new document &lt;/title>
 &lt;/head>
 &lt;body>
 &lt;div id="parentN" style="height:300px;background-color:#EEEEEE;">
 &lt;button id="bt" style="border:1px solid windowtext;background-color:#C3EFEF;">屏蔽上级dom的click事件&lt;/button>
 &lt;/div>
 &lt;/body>
&lt;/html>
</pre><br />以下是js代码：<br /><pre name="code" class="java">
  &lt;script>

Event = function(e){
	this.et = e;
}

Event.prototype.stopEvent = function(){
	this.stopPropagation();
	this.preventDefault();
}

Event.prototype.stopPropagation = function(){
	var ev = this.et;
    if (ev.stopPropagation) {
        ev.stopPropagation();
    } else {
        ev.cancelBubble = true;
    }
}

Event.prototype.preventDefault = function(){
	var ev = this.et;
    if(ev.preventDefault) {
        ev.preventDefault();
    } else {
        ev.returnValue = false;
    }
}

Event.on = function(dom,eventName,callFunc,scope,config){
	var scope = scope||window;
	var config = config || {};
	var h = function(e){
		var evt = window.event || e;
		callFunc.call(scope,evt,config);
	}
	if(eventName == "mousewheel" && dom.addEventListener){ 
        dom.addEventListener("DOMMouseScroll", h, false);
    }
	else{
		if(window.attachEvent){
			dom.attachEvent("on"+eventName, h);
		}
		else if(window.addEventListener){
			dom.addEventListener(eventName, h,false);
		}
	}
}

function divClick(e){
	alert("您当前点击的是div");
	var ev = new Event(e);
	ev.stopEvent();
}

function buttonClick(e){
	var ev = new Event(e);
	ev.stopEvent();
	alert("您当前点击的是button");
}

function onScroll(e){
	var ev = new Event(e);
	ev.stopEvent();
}

window.onload = function(){
	Event.on(document.getElementById("parentN"),"click",divClick,window);
	Event.on(document.getElementById("parentN"),"contextmenu",divClick,window);
	Event.on(document.getElementById("bt"),"click",buttonClick,window);
	Event.on(document.getElementById("bt"),"contextmenu",function(e){
		var ev = new Event(e);
	ev.stopEvent();
	},window);

}
  &lt;/script></pre><br /><br />这样就可以保证在div上单击时提示的是“您当前点击的是div”，而在按钮上单击时显示的是“您当前点击的是button”，这句“您当前点击的是div”就不会显示了。<br />同样在div上点右键也会提示“您当前点击的是div”，而在按钮上右键就不会提示了，<br /><pre name="code" class="java">
var ev = new Event(e);
ev.stopEvent();</pre><br />关键就是上面这句代码，这个参数e就是event了。<br /><br />以上代码在ie以及firefox中测试通过。
          <br/>
          <span style="color:red;">
            <a href="http://bazhuang.javaeye.com/blog/163011#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 18 Feb 2008 16:39:59 +0800</pubDate>
        <link>http://bazhuang.javaeye.com/blog/163011</link>
        <guid>http://bazhuang.javaeye.com/blog/163011</guid>
      </item>
      <item>
        <title>分别利用css和js来使div中的图片居中</title>
        <author>bazhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bazhuang.javaeye.com">bazhuang</a>&nbsp;
          链接：<a href="http://bazhuang.javaeye.com/blog/156001" style="color:red;">http://bazhuang.javaeye.com/blog/156001</a>&nbsp;
          发表时间: 2008年01月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          CSS脚本如下：<br /><pre name="code" class="java">
&lt;style>
	.img_center{
		height:200px;
		width:200px;
		background-image:url("t4.jpg");
		background-repeat:no-repeat;
		background-position:center center;
	}
&lt;/style>
css实现图片居中：
&lt;div style="border:1px solid windowtext;height:200px;width:200px;">
&lt;img src="s.gif" class="img_center"/>
&lt;/div>
</pre><br />这里主要思路是把img的高度和宽度都设置为和div的一致，然后将图片作为背景显示来达到图片居中的目的，不过还需要利用一个s.gif（1*1）这个图片，ext就有。<br /><br />JS脚本如下：<br /><pre name="code" class="java">
&lt;script type="text/javascript">
window.onload=function(){
	var img = document.getElementById("c_img");
	var div = document.getElementById("c_div");
	var height = div.style.height;
	var width = div.style.width;
	img.style.marginTop = (parseInt(height,10) - img.offsetHeight) / 2 + "px";
	img.style.marginLeft = (parseInt(width,10) - img.offsetWidth) / 2 + "px";
}
&lt;/script>
js实现图片居中：
&lt;div id="c_div" style="border:1px solid windowtext;height:200px;width:200px;">
&lt;img src="t4.jpg" id="c_img"/>
&lt;/div>
</pre><br />这样也可以实现图片居中，省去了s.gif这个图片，不过一定要浏览器打开脚本执行功能，不然的话，图片就只能蜗居在div的左上角了。
          <br/>
          <span style="color:red;">
            <a href="http://bazhuang.javaeye.com/blog/156001#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 15 Jan 2008 14:01:51 +0800</pubDate>
        <link>http://bazhuang.javaeye.com/blog/156001</link>
        <guid>http://bazhuang.javaeye.com/blog/156001</guid>
      </item>
      <item>
        <title>div的float导致的问题</title>
        <author>bazhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bazhuang.javaeye.com">bazhuang</a>&nbsp;
          链接：<a href="http://bazhuang.javaeye.com/blog/154385" style="color:red;">http://bazhuang.javaeye.com/blog/154385</a>&nbsp;
          发表时间: 2008年01月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          原来的想法是想在左边显示一棵树，右边放一个div显示内容，所以右边的div就用了float:right。<br />代码如下：<br /><pre name="code" class="java">
&lt;style type="text/css">
.content{
	position:relative;
	float:left;
	width:500px;
}

.tab_content{
	background-color:#C3DAF9;
	padding:2px;
}

.div{
	background-color:#FFFFFF;
}
&lt;/style>
&lt;/head>

&lt;body>
&lt;div class="content">
&lt;div class="tab_content">
&lt;div class="div">content&lt;/div>
&lt;/div>
&lt;/div>
 &lt;/body>
</pre><br />这样就会发现在ie下content的背景色不是白色，得不到想要的结果，而当把content中的<br />position:relative;float:left;删除掉，就可以正常显示了。<br /><br />或者在tab_content或div的css中添加width:100%;也就是设置一个width就可以了。即使是设置为0px也是可以得到想要的结果的。<br /><br />不知道这个问题的原因是什么？在firefox下都正常显示。
          <br/>
          <span style="color:red;">
            <a href="http://bazhuang.javaeye.com/blog/154385#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Jan 2008 14:48:28 +0800</pubDate>
        <link>http://bazhuang.javaeye.com/blog/154385</link>
        <guid>http://bazhuang.javaeye.com/blog/154385</guid>
      </item>
      <item>
        <title>javascript中的函数（方法）延时执行的实现</title>
        <author>bazhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bazhuang.javaeye.com">bazhuang</a>&nbsp;
          链接：<a href="http://bazhuang.javaeye.com/blog/145302" style="color:red;">http://bazhuang.javaeye.com/blog/145302</a>&nbsp;
          发表时间: 2007年12月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近一直在重复发明轮子，又碰到了一个需要用到类似sleep函数的函数，可javascript中并没有提供函数暂停执行Nms的方法，只能自己利用setInterval实现一个类似的功能。</p>
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span>delay&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(fn,parm,scope,config){ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;start&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Date(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;zero_interval&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;config&nbsp;=&nbsp;config&nbsp;||&nbsp;[]; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;h&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">new</span><span>&nbsp;Date()-start&nbsp;&gt;=parm){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(zero_interval); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn.apply(scope,config); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;zero_interval&nbsp;=&nbsp;setInterval(h,parm); &nbsp;&nbsp;</span> </li>
    <li class=""><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>参数说明如下，fn是延时之后待执行的函数，parm是延时的时间（最后的延时时间会在此基础上增加10-15ms），scope是fn函数的作用范围，config是fn函数的参数。</p>
<p>用法如下：</p>
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;startT; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="keyword">function</span><span>&nbsp;delayShow(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;startT&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Date(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;delay(show,20); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">function</span><span>&nbsp;show(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="keyword">new</span><span>&nbsp;Date()&nbsp;-&nbsp;startT); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>这里得到的提示是31ms的样子，不过在我自己的代码中只是需要延时一下，而不需要严格控制时间的长短。所以这个时间也就没必要细究了。</p>
<p>我自己程序中的代码如下：</p>
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span>ZERO.delay&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(fn,parm,scope,config){ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;start&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Date(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;zero_interval&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;config&nbsp;=&nbsp;config&nbsp;||&nbsp;[]; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;scope&nbsp;=&nbsp;scope&nbsp;||&nbsp;window; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;h&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">new</span><span>&nbsp;Date()-start&nbsp;&gt;=parm){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearInterval(zero_interval); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn.apply(scope,config); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;zero_interval&nbsp;=&nbsp;setInterval(h,parm); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>ZMenu.prototype.onMouseOver&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.addClass(</span><span class="string">&quot;mouseoverstyle&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.hiddenMenu&nbsp;=&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>.hasChild){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.click(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>ZMenu.prototype.onMouseOut&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//此处需要延时一段时间再执行 </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(</span><span class="keyword">this</span><span>.hasChild){ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZERO.delay(</span><span class="keyword">this</span><span>.hideChildMenu,20,</span><span class="keyword">this</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.hiddenMenu&nbsp;=&nbsp;</span><span class="keyword">true</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.hiddenMenu&nbsp;=&nbsp;</span><span class="keyword">true</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.hideChildMenu(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://bazhuang.javaeye.com/blog/145302#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 01 Dec 2007 16:12:58 +0800</pubDate>
        <link>http://bazhuang.javaeye.com/blog/145302</link>
        <guid>http://bazhuang.javaeye.com/blog/145302</guid>
      </item>
      <item>
        <title>ZeroCalendar日历控件介绍</title>
        <author>bazhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bazhuang.javaeye.com">bazhuang</a>&nbsp;
          链接：<a href="http://bazhuang.javaeye.com/blog/143246" style="color:red;">http://bazhuang.javaeye.com/blog/143246</a>&nbsp;
          发表时间: 2007年11月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近2个多星期以来，自己写了一个日历控件，主要解决了以下问题：</p>
<p>1、采用css和dom来进行日历的编写，没有采用table来进行日历显示，日历的大小不随日期切换而变化；<br />
2、日期格式可由用户随意定义，可以为2007-11-2也可以为2007-11-02，格式化字符串的样式说明如下：<br />
* 以下参数如果书写为1位的话就表示对应转换字符串中的1位，如yyyy-MM-dd就表示转换成2007-09-02的样式<br />
* 而yyyy-M-d 就表示为2007-9-2；<br />
* y---年<br />
* M---月<br />
* d---日<br />
* h---小时<br />
* m---分<br />
* s---秒<br />
* S---毫秒<br />
* W---英文星期<br />
* w---中文星期<br />
3、支持绝大部分浏览器（IE,firefox,safari,netscape,opera均通过测试）；<br />
4、不仅仅实现了日历，还对Date对象进行了扩展，具体的method请参考js/core/Date.js；<br />
5、还有就是对htmlElement进行了扩展，方便以后书写程序，例如：获取元素在页面上的（左边距，上边距，<br />
高度，宽度）、增加css样式、删除样式等等，详细内容请参考js/core/element.js；<br />
6、日历可以跨iframe框架显示在最上方</p>
<p>详细的介绍请查看<a href="http://www.zerocrm.cn/declare.htm">http://www.zerocrm.cn/declare.htm</a>，同时提供源代码下载，希望大家多多给提意见</p>
          <br/>
          <span style="color:red;">
            <a href="http://bazhuang.javaeye.com/blog/143246#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 24 Nov 2007 11:34:45 +0800</pubDate>
        <link>http://bazhuang.javaeye.com/blog/143246</link>
        <guid>http://bazhuang.javaeye.com/blog/143246</guid>
      </item>
  </channel>
</rss>