Jquery操作select
posted @ 2012-04-05 14:00 段旭 閱讀(1148) | 評論 (0) | 編輯 收藏
隨筆 - 42, 文章 - 1, 評論 - 0, 引用 - 0
|
Jquery操作select
摘要: 以下是操作 下拉列表的常用功能:1.獲取列表項中候選項的數目。2.獲得選中項的索引值。3.獲得當前選中項的值4.設定選擇值5.設定選擇項 1 //得到select項的個數 2 jQuery.fn.size = function(){ ... 閱讀全文
posted @ 2012-04-05 14:00 段旭 閱讀(1148) | 評論 (0) | 編輯 收藏 Oracle全角変換SELECT UTL_I18N.TRANSLITERATE (TO_MULTI_BYTE(NAME), 'KANA_HIRAGANA') NAME--半角カタカナ?英數字-->全角ひらかな posted @ 2012-03-27 18:52 段旭 閱讀(640) | 評論 (0) | 編輯 收藏 mysql 取整函數1.ceil () /ceiling() 向上取整 ex: ceil(1.2) = 2 2.floor () 向下取整 ex: floor(1.2) = 1 3.round() 四舍五入 posted @ 2012-03-07 16:32 段旭 閱讀(2375) | 評論 (0) | 編輯 收藏 mysql 日期這里是一個使用日期函數的例子。下面的查詢選擇了所有記錄,其date_col的值是在最后30天以內: mysql> SELECT something FROM table DAYOFWEEK(date) WEEKDAY(date) DAYOFMONTH(date) DAYOFYEAR(date) MONTH(date) DAYNAME(date) MONTHNAME(date) QUARTER(date) WEEK(date) WEEK(date,first) YEAR(date) HOUR(time) MINUTE(time) SECOND(time) PERIOD_ADD(P,N) PERIOD_DIFF(P1,P2) DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type) ADDDATE(date,INTERVAL expr type) SUBDATE(date,INTERVAL expr type) MySQL在expr格式中允許任何標點分隔符。表示顯示的是建議的分隔符。如果date參數是一個DATE值并且你的計算僅僅 mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND; 如果你指定太短的間隔值(不包括type關鍵詞期望的間隔部分),MySQL假設你省掉了間隔值的最左面部分。例如, mysql> select DATE_ADD('1998-01-30', Interval 1 month); 注意,從前面的例子中詞INTERVAL和type關鍵詞不是區分大小寫的。 TO_DAYS()不打算用于使用格列高里歷(1582)出現前的值。 FROM_DAYS(N) TO_DAYS()不打算用于使用格列高里歷(1582)出現前的值。 DATE_FORMAT(date,format) 所有的其他字符不做解釋被復制到結果中。 mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'); TIME_FORMAT(time,format) CURRENT_DATE CURTIME() CURRENT_TIME NOW() SYSDATE() CURRENT_TIMESTAMP UNIX_TIMESTAMP() UNIX_TIMESTAMP(date) 當UNIX_TIMESTAMP被用于一個TIMESTAMP列,函數將直接接受值,沒有隱含的“string-to-unix-timestamp”變換。 FROM_UNIXTIME(unix_timestamp) FROM_UNIXTIME(unix_timestamp,format) SEC_TO_TIME(seconds) TIME_TO_SEC(time) mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'); TIME_FORMAT(time,format) 其他修飾符產生一個NULL值或0。 CURRENT_DATE CURTIME() CURRENT_TIME NOW() SYSDATE() CURRENT_TIMESTAMP UNIX_TIMESTAMP() UNIX_TIMESTAMP(date) 當UNIX_TIMESTAMP被用于一個TIMESTAMP列,函數將直接接受值,沒有隱含的“string-to-unix-timestamp”變換 www.knowsky.com。 FROM_UNIXTIME(unix_timestamp) FROM_UNIXTIME(unix_timestamp,format) SEC_TO_TIME(seconds) TIME_TO_SEC(time) posted @ 2012-03-07 16:31 段旭 閱讀(264) | 評論 (0) | 編輯 收藏 構建jQuery對象(function( window, undefined ) {
var jQuery = (function() { // 構建jQuery對象 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); }
// jQuery對象原型 jQuery.fn = jQuery.prototype = { constructor: jQuery, init: function( selector, context, rootjQuery ) { // selector有以下7種分支情況: // DOM元素 // body(優化) // 字符串:HTML標簽、HTML字符串、#id、選擇器表達式 // 函數(作為ready回調函數) // 最后返回偽數組 } };
// Give the init function the jQuery prototype for later instantiation jQuery.fn.init.prototype = jQuery.fn;
// 合并內容到第一個參數中,后續大部分功能都通過該函數擴展 // 通過jQuery.fn.extend擴展的函數,大部分都會調用通過jQuery.extend擴展的同名函數 jQuery.extend = jQuery.fn.extend = function() {};
// 在jQuery上擴展靜態方法 jQuery.extend({ // ready bindReady // isPlainObject isEmptyObject // parseJSON parseXML // globalEval // each makeArray inArray merge grep map // proxy // access // uaMatch // sub // browser });
// 到這里,jQuery對象構造完成,后邊的代碼都是對jQuery或jQuery對象的擴展 return jQuery;
})();
window.jQuery = window.$ = jQuery; })(window); posted @ 2012-02-22 13:10 段旭 閱讀(777) | 評論 (0) | 編輯 收藏 常用正則式常用的數字正則(嚴格匹配)
正則 含義
^[1-9]\d*$ 匹配正整數
^-[1-9]\d*$ 匹配負整數
^-?[1-9]\d*$ 匹配整數
^[1-9]\d*|0$ 匹配非負整數(正整數 + 0)
^-[1-9]\d*|0$ 匹配非正整數(負整數 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 匹配正浮點數
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 匹配負浮點數
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ 匹配浮點數
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ 匹配非負浮點數(正浮點數 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ 匹配非正浮點數(負浮點數 + 0) 常用字符串正則 正則 含義 補充 ^[A-Za-z]+$ 匹配由26個英文字母組成的字符串 或 /^[a-z]+$/i ^[A-Z]+$ 匹配由26個英文字母的大寫組成的字符串 ^[a-z]+$ 匹配由26個英文字母的小寫組成的字符串 ^[A-Za-z0-9]+$ 匹配由數字和26個英文字母組成的字符串 注意\w包含下劃線_ ^\w+$ 匹配由數字、26個英文字母或者下劃線組成的字符串 匹配中文字符 普遍使用的正則是[\u4e00-\u9fa5],但這個范圍并不完整。例如: /[\u4e00-\u9fa5]/.test( '?' ) // 測試部首?,返回false 根據Unicode 5.0版編碼,要準確的判斷一個中文字符要包括: 范圍 含義 范圍 含義 2E80-2EFF CJK 部首補充 2F00-2FDF 康熙字典部首 3000-303F CJK 符號和標點 31C0-31EF CJK 筆畫 3200-32FF 封閉式 CJK 文字和月份 3300-33FF CJK 兼容 3400-4DBF CJK 統一表意符號擴展 A 4DC0-4DFF 易經六十四卦符號 4E00-9FBF CJK 統一表意符號 F900-FAFF CJK 兼容象形文字 FE30-FE4F CJK 兼容形式 FF00-FFEF 全角ASCII、全角標點 因此,正確的匹配中文字符正則表達式為: var rcjk = /[\u2E80-\u2EFF\u2F00-\u2FDF\u3000-\u303F\u31C0-\u31EF\u3200-\u32FF\u3300-\u33FF\u3400-\u4DBF\u4DC0-\u4DFF\u4E00-\u9FBF\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFFEF]+/g; 如果不希望匹配標點、符號,在正則中去掉對應的范圍即可: 3000-303F CJK 符號和標點 FF00-FFEF 全角ASCII、全角標點 匹配雙字節字符(包括漢字在內) [^\x00-\xff],可以用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1),代碼示例如下: console.info( "abc".replace( /[^\x00-\xff]/g,"aa" ).length ) // 3 console.info( "漢字".replace( /[^\x00-\xff]/g,"aa" ).length ) // 4 console.info( "abc漢字".replace( /[^\x00-\xff]/g,"aa").length ) // 7 posted @ 2012-02-22 10:57 段旭 閱讀(270) | 評論 (0) | 編輯 收藏 JQuery總體架構
(function( window, undefined ) {
// 構造jQuery對象 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); } // 工具函數 Utilities // 異步隊列 Deferred // 瀏覽器測試 Support // 數據緩存 Data // 隊列 queue // 屬性操作 Attribute // 事件處理 Event // 選擇器 Sizzle // DOM遍歷 // DOM操作 // CSS操作 // 異步請求 Ajax // 動畫 FX // 坐標和大小 window.jQuery = window.$ = jQuery; })(window); 從上邊的注釋看,jQuery的源碼結構相當清晰、條理,不像代碼那般晦澀和讓人糾結。 posted @ 2012-02-22 10:43 段旭 閱讀(230) | 評論 (0) | 編輯 收藏 自調用匿名函數 self-invoking anonymous function
1.這是一個自調用匿名函數。什么東東呢?在第一個括號內,創建一個匿名函數;第二個括號,立即執行 2.為什么要創建這樣一個“自調用匿名函數”呢? 通過定義一個匿名函數,創建了一個“私有”的命名空間,該命名空間的變量和方法,不會破壞全局的命名空間。這點非常有用也是一個JS框架必須支持的功能,jQuery被應用在成千上萬的JavaScript程序中,必須確保jQuery創建的變量不能和導入他的程序所使用的變量發生沖突。 3.匿名函數從語法上叫函數直接量,JavaScript語法需要包圍匿名函數的括號,事實上自調用匿名函數有兩種寫法(注意標紅了的右括號): (function() { console.info( this ); console.info( arguments ); }( window ) (function() { console.info( this ); console.info( arguments ); } 4.為什么要傳入window呢? 通過傳入window變量,使得window由全局變量變為局部變量,當在jQuery代碼塊中訪問window時,不需要將作用域鏈回退到頂層作用域,這樣可以更快的訪問window;這還不是關鍵所在,更重要的是,將window作為參數傳入,可以在壓縮代碼時進行優化,看看jquery-1.6.1.min.js:
5.為什么要在在參數列表中增加undefined呢? 在 自調用匿名函數 的作用域內,確保undefined是真的未定義。因為undefined能夠被重寫,賦予新的值。
6. 注意到源碼最后的分號了嗎? 分號是可選的,但省略分號并不是一個好的編程習慣;為了更好的兼容性和健壯性,請在每行代碼后加上分號并養成習慣。
posted @ 2012-02-22 10:41 段旭 閱讀(1145) | 評論 (0) | 編輯 收藏 jquery設置元素的readonly和disabledJquery的api中提供了對元素應用disabled和readonly屬性的方法,在這里記錄下。如下:
對于為元素設置readonly屬性和取消readonly屬性的方法還有如下兩種:
$('input').attr("readonly","readonly")//將input元素設置為readonly $('input').attr("disabled","disabled")//將input元素設置為disabled
對于為元素設置disabled屬性和取消disabled屬性的方法還有如下兩種:
$('input').attr("disabled","disabled")//將input元素設置為disabled posted @ 2012-02-21 15:29 段旭 閱讀(261) | 評論 (0) | 編輯 收藏 網友整理三亞防宰攻略手冊針對微博熱議的“三亞旅游被宰”經歷,新浪旅游根據網友留言及評論整理了一份三亞拒絕挨宰攻略。 跟團游 團隊旅行中,最大塊的挨宰費主要是購物店、燒香;小的費用主要是看人妖、潛水、互動節目。總之最后你的花銷很可能超出團費。 有些人在當地報名參加“一日游”等,常見的被宰方式是從這家旅行社被“賣”到另一家旅行社,可能還要忍受非常惡劣的服務態度。 防宰攻略: 1.選擇正規、規模大的旅行社。 2.在簽訂合同的時候,細節一定要問清楚,有些東西需要額外注明在合同中,以確保自身的利益能夠得到保障。 3.在切身利益受到侵害的時候,立刻撥打相關投訴電話,必要時報警。 自助游 【吃海鮮】 要么缺斤短兩,要么就是被天價的海鮮所“打敗”,少則幾百,多則幾千,普通游客難以承受。 防宰攻略: 1.如果有導游、出租車司機、摩托車夫、三輪車夫向你極力推薦某某海鮮店,要多留個心眼,或許到了那里你就身不由己了……不要聽信路邊發廣告、發名片的游說。 2.吃海鮮可以考慮海鮮市場??梢再I海鮮直接加工,成本相對低廉,方便且便宜。 3.遠離黑心海鮮店。 黑心海鮮店一般分布在高端酒店旁或者離市區較遠的地方,騙人的方法有的極其夸張。 A.當你指向一個東西、問價格的時候,小二順勢拿出就在你眼前拍死,你還沒回過神這個東西已經需要你來買單了! B.你問價格的時候,老板熱情地告訴你不貴啦才4元每斤啦,但等你結賬的時候可能是40元每斤或者400元每斤。 C.嚴重缺斤短兩。 【買水果】 在三亞買美味的熱帶水果,也要格外注意。 1.自帶小秤。 缺斤短兩是小商販們最慣用的伎倆,而我們也應該同樣細心一些,稱一稱所購買的物品到底多重(先談價錢再亮秤)。 2.去正規的水果市場,店鋪多,市場管理相對完善。 3.如果當地有熟人,可以讓他帶你去買。 【景點游玩】 1.網上提前訂門票。一般網絡訂票能更優惠,建議提前購票。 2.不必每個景點都去,去一些重點和有代表性的景點便可。 3.充分利用公交車、旅游專線巴士、機場巴士等公共資源。 4.包車線路一定要自己設計,否則容易被宰。 5.慎買珍珠、水晶等。 6.三輪車和兩輪摩的,建議不要乘坐,危險并且很容易被“宰”。 7.住小酒店,建議不要讓服務員幫你叫車,說不定會叫來跟他們有利益鏈條的相關車輛。 8.無招勝有招。在亞龍灣、海棠灣的酒店盡情享受陽光,盡量避免外出。 posted @ 2012-01-30 17:12 段旭 閱讀(226) | 評論 (0) | 編輯 收藏 [IBM]構建輕量級 Batch 框架處理 DB2 Content Manager 8.3 大量數據導入
【來源】http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0908luyx/
本文介紹了如何使用多線程來構建輕量級 Batch 框架,將大量的數據遷移到 IBM DB2 Content Manager 8.3 中。通過本文的學習,讀者可以了解如何通過使用多線程調用 IBM DB2 Content Manager API 構建的框架來啟動,暫停,恢復,停止,放緩等操作。 在用 API 導入大量數據的過程中,如果沒有框架很難有效的對整個過程控制,僅僅通過日志來分析解決問題總是很浪費時間,并且效率不太理想。 本文的內容放在了如何使用多線程和配置文件來構建 Batch 框架來處理大數量導入的問題。 隨著 IBM DB2 Content Manager(簡稱 IBM CM)產品的不斷成熟,越來越多的內容管理系統需要遷移到 IBM CM 中來,這些需要遷移的數據通常首先把結構化的內容導到文本文件中,與之相對應的圖像和 pdf 文件通常放在對應的文件夾中,圖像和 pdf 對應的文件夾路徑也通常存放在文本文件中,然后遷移程序遍歷文本文件,把對應的 Item 遷移到 IBM CM 中。這些需要遷移的數據通常都有幾百 G,如何有效的控制遷移過程是一個很大的挑戰,因此我們必須構建一個輕量級的 batch 處理框架來控制整個數據的遷移周期,記錄處理過程中的錯誤,保證數據的一致性。 同時,在用 API 導入數據的過程中,被導入數據總是千邊萬化,無效的映射導入數據和 DB2 Content Manager 的項,導致工作變得復雜,同時使的設計和代碼冗余,并且使重用,維護和擴展履步為艱難。 為了克服所提到的挑戰,這個 batch 框架必須要有以下功能:
要使框架有交互性,我們必須有三個個線程:客戶端線程,服務端線程,工作線程??蛻舳司€程負責發出工作指令,服務端線程接受這些指令并調用工作線程來做實際的工作。對于客戶端和服務器交互,在沒有 web 服務器支持的情況下,我們可以采用一種古老但是很有效的做法:socket 編程。 Java socket 對象的 accept 方法會一直阻塞直到客戶端有程序輸入,當客戶端有新的命令輸入的時候,服務器端從 socket 中讀出命令,然后執行命令。下面是示例程序,Client.java 代表客戶端程序,Server.java 代表服務器端程序,Worker.java 代表工作程序 ,Config.java 代表系統中一些參數配置。 清單 1. 客戶端程序
清單 2. 服務器端程序
清單 3. 工作程序
大數量的數據遷移一般是在周末或者晚上進行,但是如果客戶的歷史數據太大,在周末或者晚上數據可能處理不完,為了不影響生產環境的性能,我們必須能夠在客戶的工作時間暫緩處理或者降低處理的頻率,把 cpu 等資源讓給客戶程序,也就是說處理線程 worker 的工作可以 suspend 或者 slowdow 。為了讓 worker 線程知道需要 suspend 當前處理,我們可以在 worker 內部設置一個布爾變量 isSuspend,當程序在循環創建 CM item 的時候,我們每次都判斷一下這個布爾變量 isSuspend,當其為 ture 的時候,程序就調用線程的 wait 方法中斷當前線程的處理,wait 方法還可以接受一個以微秒為單位的時間參數,當時間到達 wait 指定的時間的時候,程序繼續創建 CM Item 。為了多線程之間的變量可見性,我們必須把 worker 的 isSuspend 變量和 suspendTime 設置為 volatile 。同理我們設置一個布爾變量 isSlowdown 以及 slowdowTime 。示例程序如下: 清單 4. 工作程序
清單 5. 主方法
清單 6.Suspend 方法
在程序暫停處理以后,我們可以提前終止 suspend,讓框架繼續處理,也就是框架必須有 resume 功能。我們調用 Worker.java 對象上的 notify 方法來實現這個功能,示例如下: 清單 7.Resume
有時候用戶因為一些原因(例如修改配置文件)想停止程序的執行,所以框架必須有 stop 的功能,但是 stop 的時候我們必須注意記錄程序處理到的行數,這樣客戶再開始執行的時候能夠從上次執行的斷點繼續執行,也就是框架具備了 re-start 功能,這是 batch 程序必須具備的一種很重要的功能,re-start 功能有多種實現方法,我們這里采取一種簡單的方法,在 stop 的時候,把當前處理的記錄到一個文本文件中去,下次啟動的時候從上次最后處理的對象開始進行處理。所以我們在 Worker.java 中增加一個 keepProcessing 布爾變量,在循環創建 CM Item 的時候 , 我們每次都判斷一下這個值是否為 true,如果為 false 的話,我們就停止循環處理,在 Worker.java 中還要增加一個 moveReaderToLastProcess 方法,把 reader 重新定向到上次處理點。 清單 8. 停止和重啟
剛才我們調用的 createItem 方法是直接拋出異常的,但是這樣的處理實際上是錯誤的,因為在 batch 處理過程中,我們不希望在處理某一個 item 出錯導致剩余的 item 不再處理,所以我們在 catch 里面對異常進行分類處理,我們 catch 住非檢查異常(runtime exception),通常非檢查異常是不可以恢復的,所以我們直接拋出,讓程序結束處理。對于其余的異常,我們只是在日志中記錄下來,并不拋出。在全部處理結束以后,用戶可以檢查日志來進行相應的處理。示例代碼如下: 清單 9. 錯誤處理
下面的內容放在了如何使用配置文件來處理導入的問題。 通過調用和運行 API 來處理數據的導入,我們首先定義一個基本信息的配置文件,用來制定連接的信息,其他配置文件的目錄,工作的目錄等有關導入需要的參數。然后定義導入數據和 DB2 Content Manager 的項的映射配置文件。配置文件定義結束后,我們就可以調用API來啟動相應的導入流程,在程序運行過程中,可以動態的更改配置,從而有效的處理導入的任務。 在開發過程中,您可以靈活地定義各種配置文件以便實現多種導入規則,同時在程序運行中進行數據校驗,以防止冗余和非法數據被錯誤導入。 下面的一些配置和代碼示例,以此介紹了如何定義配置文件,然后管理 API 來完成導入的任務。 定義基本信息配置文件:在該文件中,須先設定 IBM DB2 Content Manager 的一些連接參數, 如:
您可以在代碼中用以上參數來實現對 IBM DB2 Content Manager 的連接,代碼示例:
還需指定哪個文件夾存放映射文件,以及需導入的數據文件,如:
也可定義一些參數來增強該導入的流程控制,如:
定義映射文件:該配置文件主要用于將用戶想要導入的數據映射到 IBM DB2 Content Manager 的 Item Type 中,您可自由定制該文件,使用戶遵循您定義的規范順利完成數據遷移。如:
該定義中 C001.del 和 C002.del 是需要導入的數據文件,c01 是對應的 Item Type 名字。這種定義方法可實現將多個數據文件導入同一個 Item Type 中。 具體的對應關系如下:
這個映射關系反映了數據文件中列數和 Item Type 中 attribute 的關系,如第一列在 Item Type 中代表了名字為 COMPANYNAME 的 attribute 。您也可定義一些特殊規則,如將 position 設為負數,以便反映該列是一個特殊的 attribute, 它的值是固定的。 比如將 position 設為 -1 時,名為 SPECIALVALUE 的 attribute 的值總是為 C1 。 若您想實現將一個數據文件導入多個 Item Type 中,可在數據文件中加入一個特殊列,在映射文件中指定該列的列數,以及當該列的值和多種 Item Type 的映射關系。如:
這樣,C003.del 就不是單一的對應一個 Item Type,而是先去取第三列 INPUTVALUE 的值,再去對應表中查找到關聯的 Item Type 。該對應表可設成:
若第三列 INPUTDOCID 的值為 Value1 時,其對應的 Item Type 為 c01,同樣的當值為 Value2 時,會將該行數據導入到 c02 的 Item Type 中。 調用 API 完成操作的代碼示例:在編寫代碼過程中,需要調用 DB2 Content Manager 的 API 來完成 Item Type 以及它包含的 attribute 的創建。上文已給出了通過參數來連接 Content Manager 的方法,下面的示例代碼用得到的 DKDatastoreICM 來實現具體的操作: 清單 10. API 調用
通過本文的介紹,相信您對多線程構建的 Batch 框架實現大量數據遷移的過程,和通過配置文件的管理的 API 實現數據導入的過程也有了一定的了解和學習。您可靈活地實現一對一,一對多,多對多等各種映射關系,您也可以利用多線程來實現其他的功能的開發,編寫出更加富有創造性的軟件。 學習
獲得產品和技術
posted @ 2011-12-28 17:16 段旭 閱讀(447) | 評論 (0) | 編輯 收藏 |
|||||||||||||||||||||||||||||||||||||