<?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>CanleiSky Blog &#187; JavaScript</title>
	<atom:link href="http://www.oioq.com/weblog/category/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.oioq.com</link>
	<description>生活的理想是为了理想的生活.</description>
	<lastBuildDate>Sun, 30 May 2010 09:14:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>正则零宽断言之双单标签混合解析</title>
		<link>http://www.oioq.com/weblog/20100108/%e6%ad%a3%e5%88%99%e9%9b%b6%e5%ae%bd%e6%96%ad%e8%a8%80%e4%b9%8b%e5%8f%8c%e5%8d%95%e6%a0%87%e7%ad%be%e6%b7%b7%e5%90%88%e8%a7%a3%e6%9e%90</link>
		<comments>http://www.oioq.com/weblog/20100108/%e6%ad%a3%e5%88%99%e9%9b%b6%e5%ae%bd%e6%96%ad%e8%a8%80%e4%b9%8b%e5%8f%8c%e5%8d%95%e6%a0%87%e7%ad%be%e6%b7%b7%e5%90%88%e8%a7%a3%e6%9e%90#comments</comments>
		<pubDate>Fri, 08 Jan 2010 12:39:25 +0000</pubDate>
		<dc:creator>eays</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.oioq.com/?p=65</guid>
		<description><![CDATA[断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。
正则表达式内容：
\{Tag:([a-zA-z0-9]*)\s([^}\/]*)\}(((?!\{\/Tag:)[\s\S])*?)\{/Tag:([a-zA-z0-9]*)\}
匹配字符串1：
{Tag:test param=&#8221;1&#8243;}test{/Tag:test}
和字符串2：
{Tag:test param=&#8221;1&#8243;}{Tag:test2 param=&#8221;2&#8243;/}{/Tag:test}
匹配字符串1非常简单，字符串2相对困难些，思考了一下午，看来只有零宽断言能解决，一时没体会到零宽断言的意思。
正则零宽断言部份：(((?!\{\/Tag:)[\s\S])*?)
中文说明：：(((?!排除的字符)匹配所有表达式)无限次但尽可能少重复)
?!    是 负向零宽先行断言标志，(((?!\{\/Tag:)[\s\S])*?) 的意思是 断言匹配内容为{/Tag:外的所有内容，后跟\s\S括号*表示当断言为真时匹配所有内容。
]]></description>
			<content:encoded><![CDATA[<p>断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。</p>
<p>正则表达式内容：<br />
\{Tag:([a-zA-z0-9]*)\s([^}\/]*)\}(((?!\{\/Tag:)[\s\S])*?)\{/Tag:([a-zA-z0-9]*)\}</p>
<p>匹配字符串1：<br />
{Tag:test param=&#8221;1&#8243;}test{/Tag:test}</p>
<p>和字符串2：<br />
{Tag:test param=&#8221;1&#8243;}{Tag:test2 param=&#8221;2&#8243;/}{/Tag:test}</p>
<p>匹配字符串1非常简单，字符串2相对困难些，思考了一下午，看来只有零宽断言能解决，一时没体会到零宽断言的意思。</p>
<p>正则零宽断言部份：(((?!\{\/Tag:)[\s\S])*?)</p>
<p>中文说明：：(((?!排除的字符)匹配所有表达式)无限次但尽可能少重复)</p>
<p>?!    是 负向零宽先行断言标志，(((?!\{\/Tag:)[\s\S])*?) 的意思是 断言匹配内容为{/Tag:外的所有内容，后跟\s\S括号*表示当断言为真时匹配所有内容。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oioq.com/weblog/20100108/%e6%ad%a3%e5%88%99%e9%9b%b6%e5%ae%bd%e6%96%ad%e8%a8%80%e4%b9%8b%e5%8f%8c%e5%8d%95%e6%a0%87%e7%ad%be%e6%b7%b7%e5%90%88%e8%a7%a3%e6%9e%90/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jquery UI dialog 挡住浮动层或iframe</title>
		<link>http://www.oioq.com/weblog/20091205/jquery-ui-dialog-%e6%8c%a1%e4%bd%8f%e6%b5%ae%e5%8a%a8%e5%b1%82%e6%88%96iframe</link>
		<comments>http://www.oioq.com/weblog/20091205/jquery-ui-dialog-%e6%8c%a1%e4%bd%8f%e6%b5%ae%e5%8a%a8%e5%b1%82%e6%88%96iframe#comments</comments>
		<pubDate>Sat, 05 Dec 2009 04:39:54 +0000</pubDate>
		<dc:creator>CanleiSky</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.oioq.com/?p=49</guid>
		<description><![CDATA[jquery UI dialog 老是挡住浮动的层，导致dialog弹出后浮动元素消失，这种情况只会在ie6下出现，解决办法是在浮动层的CSS样式里设置一下高度就可以了。
]]></description>
			<content:encoded><![CDATA[<p>jquery UI dialog 老是挡住浮动的层，导致dialog弹出后浮动元素消失，这种情况只会在ie6下出现，解决办法是在浮动层的CSS样式里设置一下高度就可以了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oioq.com/weblog/20091205/jquery-ui-dialog-%e6%8c%a1%e4%bd%8f%e6%b5%ae%e5%8a%a8%e5%b1%82%e6%88%96iframe/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript stringToTime(字符转时间),dateDiff(时间相减)</title>
		<link>http://www.oioq.com/weblog/20090923/javascript-stringtotime%e5%ad%97%e7%ac%a6%e8%bd%ac%e6%97%b6%e9%97%b4datediff%e6%97%b6%e9%97%b4%e7%9b%b8%e5%87%8f</link>
		<comments>http://www.oioq.com/weblog/20090923/javascript-stringtotime%e5%ad%97%e7%ac%a6%e8%bd%ac%e6%97%b6%e9%97%b4datediff%e6%97%b6%e9%97%b4%e7%9b%b8%e5%87%8f#comments</comments>
		<pubDate>Wed, 23 Sep 2009 12:55:44 +0000</pubDate>
		<dc:creator>CanleiSky</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.oioq.com/?p=30</guid>
		<description><![CDATA[
function stringToTime(string){
	var f = string.split(' ', 2);
	var d = (f[0] ? f[0] : '').split('-', 3);
	var t = (f[1] ? f[1] : '').split(':', 3);
	return (new Date(
		parseInt(d[0], 10) &#124;&#124; null,
		(parseInt(d[1], 10) &#124;&#124; 1)-1,
		parseInt(d[2], 10) &#124;&#124; null,
		parseInt(t[0], 10) &#124;&#124; null,
		parseInt(t[1], 10) &#124;&#124; null,
		parseInt(t[2], 10) &#124;&#124; null
	)).getTime();
}
function dateDiff(date1, date2){
	var type1 = typeof date1, type2 = typeof date2;
	if(type1 == 'string')
		date1 [...]]]></description>
			<content:encoded><![CDATA[<p><code><br />
function stringToTime(string){<br />
	var f = string.split(' ', 2);<br />
	var d = (f[0] ? f[0] : '').split('-', 3);<br />
	var t = (f[1] ? f[1] : '').split(':', 3);</p>
<p>	return (new Date(<br />
		parseInt(d[0], 10) || null,<br />
		(parseInt(d[1], 10) || 1)-1,<br />
		parseInt(d[2], 10) || null,<br />
		parseInt(t[0], 10) || null,<br />
		parseInt(t[1], 10) || null,<br />
		parseInt(t[2], 10) || null<br />
	)).getTime();</p>
<p>}</p>
<p>function dateDiff(date1, date2){<br />
	var type1 = typeof date1, type2 = typeof date2;</p>
<p>	if(type1 == 'string')<br />
		date1 = stringToTime(date1);<br />
	else if(date1.getTime)<br />
		date1 = date1.getTime();</p>
<p>	if(type2 == 'string')<br />
		date2 = stringToTime(date2);<br />
	else if(date2.getTime)<br />
		date2 = date2.getTime();</p>
<p>	return (date1 - date2) / 1000;//结果是毫秒<br />
}<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oioq.com/weblog/20090923/javascript-stringtotime%e5%ad%97%e7%ac%a6%e8%bd%ac%e6%97%b6%e9%97%b4datediff%e6%97%b6%e9%97%b4%e7%9b%b8%e5%87%8f/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EDrag仿google ig拖曳层javascript类</title>
		<link>http://www.oioq.com/weblog/20090922/edrag%e4%bb%bfgoogle-ig%e6%8b%96%e6%9b%b3%e5%b1%82javascript%e7%b1%bb</link>
		<comments>http://www.oioq.com/weblog/20090922/edrag%e4%bb%bfgoogle-ig%e6%8b%96%e6%9b%b3%e5%b1%82javascript%e7%b1%bb#comments</comments>
		<pubDate>Tue, 22 Sep 2009 13:40:22 +0000</pubDate>
		<dc:creator>CanleiSky</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.oioq.com/?p=24</guid>
		<description><![CDATA[本函数由本站原创，首发于蓝色经典论坛，加入onReady函数。
简单应用实例：
var dropArea = ["wrap","wrap2"];
EDrag.proxy(&#8221;drag1&#8243;,&#8221;h1&#8243;,["wrap"]);
EDrag.proxy(&#8221;drag2&#8243;,&#8221;h1&#8243;,dropArea);
EDrag.proxy(&#8221;drag3&#8243;,&#8221;h1&#8243;,dropArea);
EDrag.proxy(&#8221;drag4&#8243;,&#8221;h1&#8243;,dropArea);
EDrag.proxy(&#8221;drag5&#8243;,&#8221;h1&#8243;,["wrap2"]);
EDrag.proxy(&#8221;drag6&#8243;,&#8221;h1&#8243;,dropArea);
EDrag.proxy(&#8221;drag7&#8243;,&#8221;h1&#8243;,dropArea);
EDrag.proxy(&#8221;drag8&#8243;,&#8221;h1&#8243;,dropArea);
EF.onReady(function(){EDrag.init();});
完整的应用实例：
&#60;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221; &#8220;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8220;&#62;
&#60;html xmlns=&#8221;http://www.w3.org/1999/xhtml&#8220;&#62;
&#60;head&#62;
&#60;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=gb2312&#8243; /&#62;
&#60;title&#62;无标题文档&#60;/title&#62;
&#60;style type=&#8221;text/css&#8221;&#62;
body{
margin:auto;
font-size:12px;
}
.normal {
width: 300px;
margin:13px auto 13px auto;
min-height: 200px;
padding: 2px;
border: 1px solid #666666;
background: #FFFFFF;
}
.normal h1 {
width: 300px;
height: 25px;
margin: 0px;
line-height: 25px;
font-size: 14px;
background-color: #CCC;
}
&#60;/style&#62;
&#60;script type=&#8221;text/javascript&#8221;&#62;
/**
* eDrag 层拖曳javascript类
* eDrag.proxy(&#8221;拖曳层&#8221;,&#8221;标题&#8221;,&#8221;可以扔下的容器&#8221;);
* eDrag.init();
*
*
* @author Eays
* @version 1.0
*/
var EDrag = _EDrag = {
wraps: [],
titles: [],
target: [],
document: document.documentElement &#124;&#124; [...]]]></description>
			<content:encoded><![CDATA[<p>本函数由本站原创，首发于<a href="http://bbs.blueidea.com/thread-2886632-1-1.html">蓝色经典论坛</a>，加入onReady函数。</p>
<p>简单应用实例：<br />
var dropArea = ["wrap","wrap2"];</p>
<p>EDrag.proxy(&#8221;drag1&#8243;,&#8221;h1&#8243;,["wrap"]);<br />
EDrag.proxy(&#8221;drag2&#8243;,&#8221;h1&#8243;,dropArea);<br />
EDrag.proxy(&#8221;drag3&#8243;,&#8221;h1&#8243;,dropArea);<br />
EDrag.proxy(&#8221;drag4&#8243;,&#8221;h1&#8243;,dropArea);</p>
<p>EDrag.proxy(&#8221;drag5&#8243;,&#8221;h1&#8243;,["wrap2"]);<br />
EDrag.proxy(&#8221;drag6&#8243;,&#8221;h1&#8243;,dropArea);<br />
EDrag.proxy(&#8221;drag7&#8243;,&#8221;h1&#8243;,dropArea);<br />
EDrag.proxy(&#8221;drag8&#8243;,&#8221;h1&#8243;,dropArea);</p>
<p>EF.onReady(function(){EDrag.init();});</p>
<p>完整的应用实例：</p>
<p>&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221; &#8220;<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>&#8220;&gt;<br />
&lt;html xmlns=&#8221;<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>&#8220;&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=gb2312&#8243; /&gt;<br />
&lt;title&gt;无标题文档&lt;/title&gt;<br />
&lt;style type=&#8221;text/css&#8221;&gt;<br />
body{<br />
margin:auto;<br />
font-size:12px;<br />
}<br />
.normal {<br />
width: 300px;<br />
margin:13px auto 13px auto;<br />
min-height: 200px;<br />
padding: 2px;<br />
border: 1px solid #666666;<br />
background: #FFFFFF;<br />
}<br />
.normal h1 {<br />
width: 300px;<br />
height: 25px;<br />
margin: 0px;<br />
line-height: 25px;<br />
font-size: 14px;<br />
background-color: #CCC;<br />
}<br />
&lt;/style&gt;<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
/**<br />
* eDrag 层拖曳javascript类<br />
* eDrag.proxy(&#8221;拖曳层&#8221;,&#8221;标题&#8221;,&#8221;可以扔下的容器&#8221;);<br />
* eDrag.init();<br />
*<br />
*<br />
* @author Eays<br />
* @version 1.0<br />
*/<br />
var EDrag = _EDrag = {<br />
wraps: [],</p>
<p>titles: [],</p>
<p>target: [],</p>
<p>document: document.documentElement || document.body,</p>
<p>initialPosition: {x:0 ,y:0},</p>
<p>dragArea: null,</p>
<p>shadow: null,</p>
<p>dragAreaCopy: null,</p>
<p>dragParent: null,</p>
<p>mouseOffset: 0,</p>
<p>dragAreaId: null,</p>
<p>releaseTarget: null,</p>
<p>init: function()<br />
{<br />
this.style.loadStyle();<br />
for (var i = 0 ; i &lt; this.titles.length ; i++)<br />
{<br />
var title = EF.get(this.wraps[i] , this.titles[i]);</p>
<p>if(!title.releaseTarget)<br />
title.releaseTarget = this.target[i];</p>
<p>title.onmousedown = this.down;<br />
}<br />
document.onmousemove = this.move;<br />
document.onmouseup = this.up;<br />
},</p>
<p>proxy : function(area , drag , target)<br />
{<br />
this.wraps.push(area);<br />
this.titles.push(drag);<br />
target = target == undefined ? null : target;<br />
this.target.push(target);</p>
<p>},</p>
<p>down: function (e){<br />
if(EDrag.shadow)<br />
EDrag.up();</p>
<p>e = EF.event(e);<br />
current = e.srcElement || e.target;</p>
<p>EDrag.dragArea = EF.get( EF.getDragArea(current) );</p>
<p>if(EDrag.dragArea){<br />
//记录下拖拽对象原始位置<br />
EDrag.initialPosition = EDrag.dragArea.position();<br />
//创建一个原对象的影子<br />
EDrag.shadow = EDrag.fun.createShadow(EDrag.dragArea);<br />
// 用影子替换原有对象并清空对象<br />
EDrag.dragArea = EDrag.dragArea.parentNode.replaceChild(EDrag.shadow , EDrag.dragArea);<br />
EDrag.shadow.html(&#8221;");<br />
// 将原对象设为绝对<br />
EDrag.dragArea.setStyle(&#8221;position&#8221; , &#8220;absolute&#8221;);<br />
EDrag.dragArea.setStyle(&#8221;zIndex&#8221; , &#8220;100&#8243;);<br />
EDrag.dragArea.setStyle(&#8221;left&#8221; , EDrag.initialPosition.x + &#8220;px&#8221;);<br />
EDrag.dragArea.setStyle(&#8221;top&#8221; , EDrag.initialPosition.y + &#8220;px&#8221;);</p>
<p>EDrag.dragAreaId = EDrag.dragArea.id;<br />
EDrag.dragAreaCopy = EDrag.dragArea.copy();</p>
<p>EDrag.dragArea.setStyle(&#8221;filter&#8221; , &#8220;alpha(opacity=70)&#8221;);<br />
EDrag.dragArea.setStyle(&#8221;opacity&#8221; , &#8220;0.7&#8243;);</p>
<p>EDrag.dragAreaCopy.hidden();<br />
EDrag.dragAreaCopy.setStyle(&#8221;position&#8221; , &#8220;absolute&#8221;);</p>
<p>EDrag.dragArea.setStyle(&#8221;margin&#8221; , &#8220;auto&#8221;);<br />
// 添加原对象在文档未尾<br />
EDrag.document.lastChild.appendChild(EDrag.dragArea);<br />
// 鼠标的相对位置<br />
EDrag.mouseOffset = e.offset(EDrag.initialPosition);<br />
//保存release目标<br />
EDrag.releaseTarget = current.releaseTarget;<br />
EDrag.move(e);<br />
}<br />
},</p>
<p>move: function(e)<br />
{<br />
if(!EDrag.dragArea)<br />
return false;</p>
<p>e = EF.event(e);<br />
var position = e.offset(EDrag.mouseOffset);<br />
if(position.x &gt;= 0 &amp;&amp; position.x &lt;= EDrag.document.offsetWidth &#8211; EDrag.dragArea.offsetWidth)<br />
EDrag.dragArea.setStyle(&#8221;left&#8221; , position.x +&#8221;px&#8221;);</p>
<p>if(position.y &gt;= 0)<br />
EDrag.dragArea.setStyle(&#8221;top&#8221; , position.y +&#8221;px&#8221;);</p>
<p>//遍厉目标对象所有子节点，给出拖曳层的目标层<br />
for(var i in EDrag.releaseTarget)<br />
{<br />
var releaseTarget = EF.get(EDrag.releaseTarget[i]);</p>
<p>var cover = releaseTarget.getCoverElement(EDrag.dragArea);</p>
<p>if(cover &amp;&amp; (EDrag.dragParent.last() != cover))<br />
{<br />
cover.parentNode.insertBefore(EDrag.shadow , cover);<br />
}else if(cover &amp;&amp; EDrag.dragParent.last() == cover)<br />
{<br />
EDrag.dragParent.appendChild(EDrag.shadow);<br />
}<br />
}<br />
},</p>
<p>up: function()<br />
{<br />
if(!EDrag.shadow &amp;&amp; !EDrag.dragArea)<br />
return false;</p>
<p>EDrag.dragArea.setStyle(&#8221;zIndex&#8221; , &#8220;0&#8243;);<br />
try{<br />
EDrag.dragArea.setStyle(&#8221;position&#8221; , &#8220;static&#8221;);<br />
EDrag.dragArea.parentNode.removeChild(EDrag.dragArea);<br />
EDrag.dragAreaCopy.id = EDrag.dragAreaId;<br />
EDrag.dragAreaCopy.removeAttribute(&#8221;style&#8221;);<br />
EDrag.dragAreaCopy.show();<br />
EDrag.dragParent.replaceChild(EDrag.dragAreaCopy , EDrag.shadow);<br />
EDrag.shadow = null;<br />
EDrag.dragAreaCopy.setStyle(&#8221;position&#8221; , &#8220;static&#8221;);<br />
EDrag.init();<br />
}catch(e){</p>
<p>}</p>
<p>}<br />
}<br />
/**<br />
* 自带的移动样式<br />
*/<br />
EDrag.style = _EDrag.prototype = {<br />
defaultTitle: {<br />
border: &#8220;1px dotted #000;&#8221;,<br />
cursor: &#8220;move&#8221;<br />
},</p>
<p>defaultDotted: {<br />
border: &#8220;1px dotted #CCC&#8221;,<br />
background: &#8220;#EEE&#8221;<br />
},</p>
<p>loadStyle: function()<br />
{<br />
for(var i=0 ; i &lt; EDrag.titles.length ; i++)<br />
{<br />
var title = EF.get(EDrag.wraps[i] , EDrag.titles[i]);<br />
if(title != undefined)<br />
{<br />
title.setStyle(&#8221;cursor&#8221; , EDrag.style.defaultTitle.cursor);<br />
} else {<br />
continue;<br />
}<br />
}<br />
},</p>
<p>setBorder: function(element){<br />
element.setStyle(&#8221;border&#8221; , EDrag.style.defaultDotted.border);<br />
},</p>
<p>setBackground: function(element)<br />
{<br />
element.setStyle(&#8221;background&#8221; , EDrag.style.defaultDotted.background);<br />
}<br />
}<br />
EDrag.fun = EF =  _EDrag.prototype = {</p>
<p>eventExt: function(e)<br />
{<br />
e.position = function()<br />
{<br />
e = this;<br />
if(e.pageX || e.pageY){<br />
return {x:e.pageX, y:e.pageY};<br />
}<br />
return {<br />
x:e.clientX + document.body.scrollLeft &#8211; document.body.clientLeft,<br />
y:e.clientY + document.body.scrollTop  &#8211; document.body.clientTop<br />
};<br />
},</p>
<p>e.offset = function(position)<br />
{<br />
e = this;<br />
var mouse  = e.position();<br />
return {x:parseInt(mouse.x &#8211; position.x), y:parseInt(mouse.y &#8211; position.y)};<br />
}</p>
<p>return e;<br />
},</p>
<p>event: function(e)<br />
{<br />
var e = e || window.event;<br />
return EF.eventExt(e);<br />
},</p>
<p>getDragArea: function(current)<br />
{<br />
do{<br />
var name = current.id || current.tagName || current.name;<br />
if(EDrag.wraps.search(name))<br />
return EF.ext(current);<br />
}while(current = current.parentNode)<br />
},<br />
search: function(search , array)<br />
{</p>
<p>var flag = false;<br />
array = array || this;</p>
<p>array.sort(function(x , y){<br />
for (var i = 0; i &lt; arguments.length; i++)<br />
{<br />
if(arguments[i].toString() == search)<br />
flag = true;</p>
<p>}<br />
return -1;<br />
});<br />
return flag;<br />
},</p>
<p>_get: function()<br />
{<br />
return document.getElementById(arguments[0])<br />
|| document.getElementsByTagName(arguments[0])<br />
|| document.getElementsByName(arguments[0]);<br />
},</p>
<p>ext: function(object)<br />
{</p>
<p>object.setStyle = function(type , value)<br />
{<br />
eval(&#8221;object.style.&#8221;+type+&#8221;=&#8217;&#8221;+value+&#8221;&#8216;&#8221;);<br />
}</p>
<p>object.position = function()<br />
{<br />
return EF.position(this);<br />
}</p>
<p>object.html = function(value)<br />
{<br />
if(value != undefined)<br />
return object.innerHTML = value;</p>
<p>return object.innerHTML;<br />
}</p>
<p>object.nodes = function()<br />
{<br />
var nodes = [];</p>
<p>for(i = 0 ; i &lt; this.childNodes.length ; i++)<br />
{<br />
var name = this.childNodes[i].toString();</p>
<p>if(name.indexOf(&#8221;Text&#8221;) == -1 &amp;&amp; name.indexOf(&#8221;HTMLCollection&#8221;) == -1)<br />
{<br />
nodes.push(this.childNodes[i]);<br />
}<br />
}<br />
return nodes;<br />
}</p>
<p>object.last = function()<br />
{<br />
var nodes = this.nodes();<br />
return nodes[ nodes.length - 1 ];<br />
},</p>
<p>object.hidden = function()<br />
{<br />
this.setStyle(&#8221;display&#8221; , &#8220;none&#8221;);<br />
},</p>
<p>object.show = function()<br />
{<br />
this.setStyle(&#8221;display&#8221; , &#8220;block&#8221;);<br />
},</p>
<p>object.copy = function()<br />
{<br />
return EF.get(this.cloneNode(true));<br />
},</p>
<p>object.getCoverElement= function(current)<br />
{<br />
if(this.childNodes == undefined)<br />
return false;</p>
<p>var nodes = this.nodes();<br />
for(i = 0 ; i &lt; nodes.length ; i++)<br />
{<br />
var target = EF.get( nodes[i] );<br />
var name = target.toString();</p>
<p>current = EF.ext(current);<br />
current.position = current.position();<br />
/**<br />
* 相对的y坐标<br />
*/<br />
try{<br />
var left = target.getTopArea().centerX &#8211; current.position.x;<br />
var top = target.getTopArea().centerY &#8211; current.position.y ;</p>
<p>if((left &lt; current.offsetWidth &amp;&amp; left &gt; 0 ) &amp;&amp; (top -  target.offsetWidth / 4 &lt; current.offsetHeight &amp;&amp; top &gt; 0))<br />
{<br />
EDrag.dragParent = this;<br />
return target;<br />
}else if((left &lt; current.offsetWidth &amp;&amp; left &gt; 0 ) &amp;&amp; (top &lt; 0 &amp;&amp; top &gt;= 0 &#8211; target.offsetHeight / 6))<br />
{<br />
EDrag.dragParent = this;<br />
return target;<br />
}<br />
}<br />
catch(e){ }<br />
}<br />
return false;<br />
}</p>
<p>object.getTopArea = EF.getTopArea;</p>
<p>return object;<br />
},</p>
<p>get: function(element , sonElement)<br />
{<br />
var type = typeof element;</p>
<p>if (type.indexOf(&#8221;object&#8221;) != -1)<br />
{<br />
this.object = element;<br />
this.ext(this.object);<br />
return this.object;<br />
}</p>
<p>if (arguments.length &gt; 1)<br />
{<br />
if (this._get(element).length == undefined) {<br />
this.object = this._get(element).getElementsByTagName(sonElement)[0];<br />
this.ext(this.object);<br />
return this.object;<br />
} else {<br />
this.object = this._get(element)[0].getElementsByTagName(sonElement)[0];<br />
this.ext(this.object);<br />
return this.object;<br />
}<br />
}<br />
this.object = this._get(element) || this._get(element)[0];<br />
this.ext(this.object);<br />
return this.object;<br />
},</p>
<p>position: function(e)<br />
{<br />
var p = {x:0 , y:0};<br />
while (e.offsetParent)<br />
{<br />
p.x += e.offsetLeft;<br />
p.y  += e.offsetTop;<br />
e = e.offsetParent;<br />
}</p>
<p>if (p.x != &#8220;&#8221; &amp;&amp; p.y != &#8220;&#8221;)<br />
{<br />
return p;<br />
}<br />
},</p>
<p>createBox: function()<br />
{<br />
var box = document.createElement(&#8221;div&#8221;);<br />
document.documentElement.lastChild.appendChild(box);<br />
return EF.get(box);<br />
},</p>
<p>createShadow: function(current)<br />
{<br />
if (oldShadow = document.getElementById(&#8221;EDragShadow&#8221;))<br />
{<br />
oldShadow.parentNode.removeChild(oldShadow);<br />
}</p>
<p>current = EF.get(current);</p>
<p>var shadow = current.copy();<br />
shadow = EF.get(shadow);<br />
shadow.id = &#8220;EDragShadow&#8221;;<br />
shadow.setStyle(&#8221;width&#8221; , current.offsetWidth &#8211; 6 + &#8220;px&#8221;);<br />
shadow.setStyle(&#8221;height&#8221; , current.offsetHeight &#8211; 6 + &#8220;px&#8221;);<br />
EDrag.style.setBorder(shadow);<br />
EDrag.style.setBackground(shadow);<br />
return shadow;<br />
},<br />
/**<br />
* 获取单个对象顶部区域,x,y轴中心点<br />
* @param {Object} element<br />
*/<br />
getTopArea: function(element)<br />
{<br />
try{<br />
element = element || this;<br />
element = EF.get(element);<br />
/**<br />
* 对象左边、顶部坐标<br />
*/<br />
var position = element.position();<br />
/**<br />
* 对象的宽和高度<br />
*/<br />
var offset = {x:element.offsetWidth , y:element.offsetHeight};</p>
<p>/**<br />
* x轴中心点<br />
*/<br />
element.centerX = parseInt(position.x + offset.x / 2);<br />
element.centerY = parseInt(position.y + offset.y / 2);</p>
<p>return element;<br />
}catch(e){}</p>
<p>},</p>
<p>isGecko: function()<br />
{<br />
return navigator.userAgent.indexOf(&#8221;Gecko&#8221;) == -1 ? false :true;<br />
},</p>
<p>isOpera: function()<br />
{<br />
return navigator.userAgent.indexOf(&#8221;Opera&#8221;) == -1 ? false :true;<br />
},</p>
<p>isIE: function()<br />
{<br />
return document.all ?  true : false;<br />
},</p>
<p>onReady: function(newFunction)<br />
{<br />
if(newFunction == undefined)<br />
return false;</p>
<p>this.domReady = false;</p>
<p>if(functions == undefined)<br />
var functions = [];</p>
<p>functions.push(newFunction);</p>
<p>var initial = function()<br />
{<br />
for(var i in functions)<br />
{<br />
functions[i]();<br />
}<br />
}</p>
<p>this.ready = function()<br />
{<br />
if(this.domReady)<br />
initial();</p>
<p>if (EF.isGecko() || EF.isOpera()) {<br />
try {<br />
document.removeEventListener(&#8217;DOMContentLoaded&#8217;, initial);<br />
}catch(e){}</p>
<p>document.addEventListener(&#8217;DOMContentLoaded&#8217;, initial, false);<br />
this.domReady = true;<br />
}<br />
else if (EF.isIE()) {</p>
<p>var timer = window.setInterval(function()<br />
{<br />
try {<br />
document.body.doScroll(&#8221;left&#8221;);<br />
initial();<br />
window.clearInterval(timer);<br />
this.domReady = true;<br />
}<br />
catch (e) {}<br />
}<br />
, 5);<br />
}<br />
}<br />
this.ready();</p>
<p>}<br />
}<br />
Array.prototype.search = EDrag.fun.search;<br />
var dropArea = ["wrap","wrap2"];<br />
EDrag.proxy(&#8221;drag1&#8243;,&#8221;h1&#8243;,["wrap"]);<br />
EDrag.proxy(&#8221;drag2&#8243;,&#8221;h1&#8243;,dropArea);<br />
EDrag.proxy(&#8221;drag3&#8243;,&#8221;h1&#8243;,dropArea);<br />
EDrag.proxy(&#8221;drag4&#8243;,&#8221;h1&#8243;,dropArea);<br />
EDrag.proxy(&#8221;drag5&#8243;,&#8221;h1&#8243;,["wrap2"]);<br />
EDrag.proxy(&#8221;drag6&#8243;,&#8221;h1&#8243;,dropArea);<br />
EDrag.proxy(&#8221;drag7&#8243;,&#8221;h1&#8243;,dropArea);<br />
EDrag.proxy(&#8221;drag8&#8243;,&#8221;h1&#8243;,dropArea);<br />
EF.onReady(function(){EDrag.init();});</p>
<p>&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table width=&#8221;778&#8243; border=&#8221;0&#8243; cellspacing=&#8221;0&#8243; cellpadding=&#8221;0&#8243;&gt;<br />
&lt;tr&gt;<br />
&lt;td valign=&#8221;top&#8221;&gt; &lt;div  id=&#8221;wrap&#8221;&gt;<br />
&lt;div id=&#8221;drag1&#8243;&gt;<br />
&lt;h1&gt;我不可以拖到右边&lt;/h1&gt;<br />
&lt;p&gt;<br />
设置拖放对象以限制拖放区域<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
例：EDrag.proxy( wrap , title , releaseTarget );<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
releaseTarget 为拖放区域的id,tagName,name数组<br />
&lt;/p&gt;<br />
&lt;/div&gt;<br />
&lt;div id=&#8221;drag2&#8243;&gt;<br />
&lt;h1&gt;拖放对象说明&lt;/h1&gt;<br />
&lt;p id=&#8221;msg4&#8243;&gt;<br />
拖放对象继承原对象的所有css特性<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
但似乎对float无效，比要的时候可以外加一个table<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
继承对象保证拖放后的对象和别原对象的一致性<br />
&lt;/p&gt;<br />
&lt;/div&gt;<br />
&lt;div id=&#8221;drag3&#8243;&gt;<br />
&lt;h1&gt;将一个层交给eDarg代理&lt;/h1&gt;<br />
&lt;p&gt;<br />
EDrag.proxy( wrap , title , releaseTarget );<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
wrap 为可以拖动的层，推荐使用ID<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
title 标题，为鼠标放在上面可以拖动的对象,推荐使用tagName ,releaseTarget上面有说明<br />
&lt;/p&gt;<br />
&lt;/div&gt;<br />
&lt;div id=&#8221;drag4&#8243;&gt;<br />
&lt;h1&gt;初始化EDrag拖曳&lt;/h1&gt;<br />
&lt;p&gt;<br />
EDrag.init();<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
说明：init() 需要在proxy()方法后面调用<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
这样的结构应该非常易用<br />
&lt;/p&gt;<br />
&lt;/div&gt;<br />
&lt;/div&gt;</p>
<p>&lt;/td&gt;<br />
&lt;td  valign=&#8221;top&#8221;&gt;<br />
&lt;div  id=&#8221;wrap2&#8243;&gt;<br />
&lt;div id=&#8221;drag5&#8243;&gt;<br />
&lt;h1&gt;我不可以拖到左边&lt;/h1&gt;<br />
&lt;p&gt;<br />
附带函数对象 EDrag.fun 简写EF<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
EF.get();可以支持两个参数,一个参数也可以<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
如：EF.get(&#8221;wrap&#8221; , &#8220;h1&#8243;); 表示在wrap元素内部的h1元素<br />
&lt;/p&gt;<br />
&lt;/div&gt;<br />
&lt;div id=&#8221;drag6&#8243;&gt;<br />
&lt;h1&gt;EF.get函数说明&lt;/h1&gt;<br />
&lt;p&gt;<br />
凡是通过EF.get()函数获得的对象都是经过dom扩展的<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
具有一些基本的扩展功能<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
例如：EF.get(&#8221;wrap&#8221;).html(&#8221;demo&#8221;);<br />
EF.get(&#8221;wrap&#8221;).setStyle(&#8221;margin&#8221; , &#8220;auto&#8221;);<br />
&lt;/p&gt;<br />
&lt;/div&gt;<br />
&lt;div id=&#8221;drag7&#8243;&gt;<br />
&lt;h1&gt;优势&lt;/h1&gt;<br />
&lt;p&gt;<br />
拖曳后的节点上的对象和原对象完全相同，不会影响原排版<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
其它的没什么了，只是感觉比较易用<br />
&lt;/p&gt;<br />
&lt;p&gt;</p>
<p>&lt;/p&gt;<br />
&lt;/div&gt;<br />
&lt;div id=&#8221;drag8&#8243;&gt;<br />
&lt;h1&gt;新加入onReady函数&lt;/h1&gt;<br />
&lt;p&gt;<br />
onReady类似jquery的ready ，使用onReady的优势在于可以在DOM加载完后运行多个函数，<br />
而已运行速度比window.onload快得多<br />
&lt;/p&gt;<br />
&lt;p id=&#8221;msg&#8221;&gt;</p>
<p>&lt;/p&gt;<br />
&lt;p&gt;</p>
<p>&lt;/p&gt;<br />
&lt;/div&gt;<br />
&lt;/div&gt;</p>
<p>&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oioq.com/weblog/20090922/edrag%e4%bb%bfgoogle-ig%e6%8b%96%e6%9b%b3%e5%b1%82javascript%e7%b1%bb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
