jQuery .delegate() vs .live()

<h1 style="padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;margin-top:0px;margin-right:0px;margin-bottom:1em;margin-left:0px;font-family:Verdana, Arial, Helvetica, sans-serif;font-size:1.6em;font-weight:400;line-height:normal;">jQuery .delegate() vs .live()</h1>

.live().delegate()都是藉重DOM事件會由子元素一路向父元素Bubble Up的特性,在document或特定元素統一掛上事件函數,事件被觸發時再透過選擇器比對事件目標元素是否吻合,決定要不要執行事件邏輯,藉此提升效率,同時還能將"未來才會建立的元素"也納入事件的涵蓋範圍。(細節可參考舊文)

不過,.live()與.delegate()做的事幾乎一模一樣,依江湖上的說法,1.4版推出的.delegate()又比1.3版誕生的.live()來得有效率,理由何在?

以對<table id="t">下所有<td>加掛click事件為例,多半會寫成: 
$("#t td").live("click", fn); 或 $("#t").delegate("td", "click", fn);

當執行$("#t td").live(),jQuery會監聽document的click事件,再依event.target是否吻合選擇器"#t td"決定live()所指定的click事件要不要被觸發;若使用$("#t").delegate(),jQuery監聽click事件的對象則會由document換成<table id="t">,但也一樣是比對event.target是否為td決定要不要觸發事件。二者相比,將監聽對象由document縮小到table對效能有利! 因為$("#t td").live()會過濾比對document上所有子元素產生的click事件,而$("#t").delegate("td"…)只有在table內子元素被click時才進行比對過濾,避免了非目標區元素被click時的多餘過濾流程。不過,這部分的效能損耗其實可以避免,只要改寫成$("td", document.getElementById("t")),則.live()的監聽對象就會被縮小到table而非document,此一差異性就消失了。但是,真要比效能,.live()還是難逃敗陣的命運! 為什麼?

對.live()或.delegate()來說,"td"是未來click事件觸發時比對event.target用的選擇器,理論上保留字串就夠了。當寫成$("td", document.getElementById("t")),jQuery會找尋當下所有符合的td元素,建出jQuery集合物件,但這個耗費資源建立的物件卻沒有發揮任何作用,而這個無謂的物件建立過程,在td的數量很多的情境下,就足以產生明顯效能差異。

我設計了一個實驗來驗證:如上圖,Test .live()及Test .delegate()可攔載所有<td>的click事件,分別將<td>的文字內容顯示在第一列右側的兩個<span>中,而按下Create Table則會建出5萬個<td>。

 

第一個測試我們可以先按Test .live(),再按Test .delegate(),應該都是0 ticks完成,之後按Create Table建立<td>,點選<td>就可以驗證.live()、delegate()均成功攔截到click事件。

第二個測試,則是先按Create Table建立出5萬個<td>,再按Test .live()及Test .delegate(),在我的電腦上,按Test .delegate()仍是瞬間完成,按Test .live()卻要耗上35+ ticks,推測應就是前述建立5萬個<td>元素jQuery集合耗費的時間。

最後再補充一點,如果程式思維是針對某個元素進行一連串動作: 先針對其下的子元素掛上事件,然後再進行其他操作,.delegate()允許我們寫成$("#t").delegate("..", "click", fn).css("..", "..").attr("..", "..")的串接形式,符合jQuery的直覺寫法;而.live()由於需將子元素視為主體,就無法像.delegate()般一氣喝成,也算是.delegate()寫法的另一項優點。

 轉自:http://blog.darkthread.net/post-2011-10-14-delegate-vs-live.aspx

fancybox 的API 翻譯

Fancybox的API和配置選項說明

屬性名默認值簡要說明

<thead>

</thead>

padding 10 瀏覽框內邊距,和css中的padding一個意思
margin 20 瀏覽框外邊距,和css中的margin一個意思
opacity false 如果為true,則fancybox在動畫改變的時候透明度可以跟著改變
modal false 如果為true,則'overlayShow' 會被設成'true' , 'hideOnOverlayClick', 'hideOnContentClick', 'enableEscapeButton', 'showCloseButton' 會被設成'false'
cyclic false 如果為true,相冊​​會循環播放
scrolling 'auto' 設置overflow的值來創建或隱藏滾動條,可以設置成'auto', 'yes', or 'no'
width 560 設置iframe和swf的寬度,如果'autoDimensions'為'false',這也可以設置普通文本的寬度
height 340 設置iframe和swf的高度,如果'autoDimensions'為'false',這也可以設置普通文本的高度
autoScale true 如果為true,fancybox可以自適應瀏覽器窗口大小
autoDimensions true 在內聯文本和ajax中,設置是否動態調整元素的尺寸,如果為true,請確保你已經為元素設置了尺寸大小
centerOnScroll false 如果為true,當你滾動滾動條時,fancybox將會一直停留在瀏覽器中心
ajax { } 和jquery的ajax調用選項一樣<small>注意: 'error' and 'success'這兩個回調事件會被fancybox重寫</small>
<small></small>
swf {wmode: 'transparent'} swf的設置選項
hideOnOverlayClick true 如果為true則點擊遮罩層關閉fancybox
hideOnContentClick false 如果為true則點擊播放內容關閉fancybox
overlayShow true 如果為true,則顯示遮罩層
overlayOpacity 0.3 遮罩層的透明度(範圍0-1)
overlayColor '#666' 遮罩層的背景顏色
titleShow true 如果為true,則顯示標題
titlePosition 'outside' 設置標題顯示的位置.可以設置成'outside', 'inside' 或'over'
titleFormat null 可以自定義標題的格式
transitionIn, transitionOut 'fade' 設置動畫效果. 可以設置為'elastic', 'fade' 或'none'
speedIn, speedOut 300 fade 和elastic 動畫切換的時間間隔, 以毫秒為單位
changeSpeed 300 切換時fancybox尺寸的變化時間間隔(即變化的速度),以毫秒為單位
changeFade 'fast' 切換時內容淡入淡出的時間間隔(即變化的速度)
easingIn, easingOut 'swing' 為elastic 動畫使用Easing
showCloseButton true 如果為true,則顯示關閉按鈕
showNavArrows true 如果為true,則顯示上一張下一張導航箭頭
enableEscapeButton true 如果為true,則啟用ESC來關閉fancybox
onStart null 回調函數,加載內容是觸發
onCancel null 回調函數,取消加載內容後觸發
onComplete null 回調函數,加載內容完成後觸發
onCleanup null 回調函數,關閉fancybox前觸發
onClosed null 回調函數,關閉fancybox後觸發

強制對DHCP取得IP

重新向dhcp的取得ip 

 cmd底下

ipconfig /release 
ipconfig /flushdns 
ipconfig /renew 
pause

PHP接收JSON與json_decode 遇到 BIGINT 的問題


//這是JSON的形式
$json='{"Id":610066751456396,"ImageUrl":"http:\/\/test.accuvally.com:8080\/qrcode\/2012\/0212\/14\/6689BDAFDF44D8504497BAA4F2742B58.gif"}';

 
//  json_decode  解開 JSON
$json=json_decode($json);  

 

// 若要取得 610066751456396 的寫法
echo $json->Id; 
//但是實際上因為Id若用Bigint的話,會顯示 610066751456000 

 
//所以 只要把 Id轉成 string  就可顯示
610066751456396 
echo sprintf ( "%.0f", $json->Id );