顯示具有 JavaScript 標籤的文章。 顯示所有文章
顯示具有 JavaScript 標籤的文章。 顯示所有文章

2012年5月7日

[JQuery] 選擇器 Selectors



jQuery 的 selector 主要有三種, 其目的在於選擇 HTML 中的元素:

1. HTML Tag - 例如 $('p')

    可以選取所有
元素

2. 元素 ID - 例如 $('#myId')

    選取 ID 為 myId 的特定元素

3. CSS 類別 - 例如 $('.myClass')

    選取所有套用 myClass 類別的元素

在 jQuery 中就只有這三種標示法。不過如果事情那麼簡單的話, 我也不用花工夫來寫這篇文章了。事實上 jQuery 在以上三種選擇器之外, 又另外提供複雜而又功能強大的組合標示語法, 配合它的隱含迴圈運算, 讓我們可以更精準的選擇到我們想要的各種 HTML 元素; 我把這些組合標示語法整理如下:

Basic Selector

語法 範例 說明
* $( ' * ' ) All Selector -

選取所有文件中的元素
.class $( ' .myClass ' ) Class Selector -

選取所有套用指定 CSS 類別的元素
tag $ ( ' div ' ) Element Selector -

選取類型為指定 tag 的元素
ID $ ( ' #myId ' ) ID Selector -

選取指定 ID 的元素
a, b, c, ... $ ( ' .myClass, div, #myId ' ) Multiple Selector -

以逗點區隔以選取各元素的聯集

Hierarchy

語法 範例 說明
a > b $( ' table > th ' ) Child Selector -

選取 a 的下一層的直屬子元素 b 的集合
a b $( ' table th ' ) Descendant Selector -

選取 a 的子代元素 b 的集合
a + b $( ' body + table ' ) Next Adjacent Selector -

選取緊跟著 a 元素的 b 元素; 如範例中是選取 body 之下的第一個 table
a ~ b $( ' p ~ span ') Next Siblings Selector -

選取 a 以下的所有 b 元素; 這個 b 元素必須符合 sibling 篩選條件

Basic Filter

:first $( ' ul li:first ' ) First Selector -

選取篩選的集合中的第一個元素
:last $( ' ul li:last ' ) Last Selector -

選取篩選的集合中的最後一個元素
:not(a) $( ' input:not(:checked) ' ) Not Selector -

選取篩選的集合中不符合條件的所有元素
:odd $( ' ul li:odd ' ) Odd Selector -

選取篩選的集合中所有排列順序為奇數的元素(注意: 由0起算)
:even $( ' ul li:even ' ) Even Selector -

選取篩選的集合中所有排列順序為偶數的元素(注意: 由0起算)
:eq(n) $( ' ul li:eq(n) ' ) eq Selector -

選取篩選的集合中從頭算起第幾個元素(注意: 由0起算)
:gt(n) $( ' ul li:gt(n) ' ) gt Selector -

選取篩選的集合中所有排列順序大於n的元素(注意: 由0起算)
:lt(n) $( ' ul li:lt(n) ' ) lt Selector -

選取篩選的集合中所有排列順序小於n的元素(注意: 由0起算)
:animated $( ' ul:animated ' ) Animated Selector -

選取篩選的集合中所有正在進行動畫處理過程中的元素
:header $( ' :header ' ) Header Selector -

選取篩選的集合中所有標示為標題(如 h1, h2 等)的元素

Content Filter

:has(a) $( ' div:has(p) ' ) Has Selector -

選取元素之子元素內包含至少一個符合篩選條件的元素; 在範例中, 找到所有內含 p 元素的 div 元素
:contains(text) $( ' :contains(hello) ' ) Contains Selector -

選取內容文字中包含指定字串的元素
:empty $( ' :empty ' ) Empty Selector -

選取無任何子元素(包括文字節點)的元素
:parent $( ' li:parent ' ) Parent Selector -

選取指定元素(包括文字節點)的所有父節點元素

Visibility Filter

:hidden $( ' div:hidden ' ) Hidden Selector

選取被隱藏而不可見 (設定 "visibility:hidden" 或 "display:none" 或 width/height 被設定為 0, 或者因父代元素被設定為隱藏而不可見等等) 的元素
:visible $( ' div:visible ' ) Visible Selector

選取非隱藏的元素 (實際上是根據瀏覽器傳回的 offsetWidth 及 offsetHeight 的值是否大於 0 而決定)

Form

:input $( ' :input ' ) Input Selector -

選選取所有名為 input 的 tag, 包括 select, textarea 與 button 等
:text $( ' :text ' ) Text Selector -

選取所有類型為 “text” 的元素
:password $( ' :password ' ) Password Selector -

選取所有類型為“password”的元素
:radio $( ' :radio ' ) Radio Selector -

選取所有類型為“radio”的元素
:checkbox $( ' :checkbox ' ) Checkbox Selector -

選取所有類型為“checkbox”的元素
:submit $( ' :submit ' ) Submit Selector -

選取所有類型為“submit”的元素
:image $( ' :image ' ) Image Selector -

選取所有類型為“image”的元素
:reset $( ' :reset ' ) Reset Selector -

選取所有類型為“reset”的元素
:file $( ' :file ' ) File Selector -

選取所有類型為“file”的元素
:button $( ' :button ' ) Button Selector -

選取所有類型為“button”的元素
:enabled $( ' :enabled ' ) Enabled Selector -

選取所有被 enabled 的元素
:disabled $( ' :disabled ' ) Disabled Selector -

選取所有被 disabled 的元素
:selected $( ' :selected ' ) Selected Selector -

選取所有被  selected 的元素
:checked $( ' :checked ' ) Checked Selector -

選取所有類型為 "radio" 或 "checkbox" 的元素

Child Filter

:first-child $( ' ul li:first-child ' ) First-child Selector -

選取集合中的第一個子元素
:last-child $( ' ul li:last-child ' ) Last-child Selector -

選取集合中的最後一個子元素
:only-child $( ' div p:only-child ' ) Only-child Selector -

選取一個本身為其父元素之唯一子元素的元素
:nth-child(n) $( ' ul li:nth-child(n) ' ) nth-child Selector -

選取指定元素的第 n 個子元素 (從1起算)
:nth-child(odd) $( ' ul li:nth-child(odd) ' ) 選取指定元素的所有奇數個子元素 (從1起算)
:nth-child(even) $( ' ul li:nth-child(even) ' ) 選取指定元素的所有偶數個子元素 (從1起算)
:nth-child(formula) $( ' ul li:nth-child(3n) ' ) 選取指定元素的每 n 個子元素 (從1起算); 在範例中是指定每三個子元素

Attribute

[attribute] $( ' [href] ' ) Has Attribute Selector -

選取包含指定 attribute 的所有元素;  範例中會選取所有內含 href 這個 attribute 的元素
[attribute=value] $( ' [rel=external] ' ) Attribute Equals Selector -

選取所有包含指定的 attribute 文字的元素; 範例中會選取所有 ref 這個 attribute 之文字為 "external" 的元素
['attribute!=value'] $( ' [rel!=external] ' ) Attribute Not Equal Selector -

與上一項目相反; 選取所有包含指定的 attribute 文字的元素; 範例中會選取所有 ref 這個 attribute 之文字不是 "external" 的元素”
[attribute^=value] $( ' [class^=open] ' ) Attribute Starts With Selector -

選選取所有內含指定 attribute, 且其內容以指定文字起頭的元素; 範例中會選取所有 class 這個 attribute 是以 "open" 字樣起頭者
[attribute$=value] $( ' [id$=-wrapper] ' ) Attribute Ends With Selector -

與上一項目相反; 選選取所有內含指定 attribute, 且其內容以指定文字結尾的元素; 範例中會選取所有 id 這個 attribute 是以 "-wrapper" 字樣結尾者
[attribute*=value] $( ' [class*=offer] ' ) Attribute Contains With Selector -

選取所有內含指定 attribute, 且其內容包含有指定文字的元素; 範例中會選取所有 class 這個 attribute 內含 "offer" 字樣者
[attribute~=value] $( ' [class~=offer] ' ) Attribute Contains Word Selector -

選取所有內含指定 attribute, 且其內容包含有指定英文字的元素(以空白或行首/末區隔); 範例中會選取所有 class 這個 attribute 內含 "offer" 字樣者; 可以取到 class="my offer", 但取不到 class="myoffer"
[a1=b1][a2=b2] $( ' [class=noshow] [id=myId] ' ) Multiple Attribute Selector -

選取符合多個篩選條件的交集的元素


* 註: 為了提高辨識度, 我在以上範例中都為引號前後加上了不必要的空白; 這不表示我們需要在程式中也這麼做

以上是我所做的總整理; 如果你有興趣, 也可以參考官網上的說明

2010年10月22日

jQuery UI-Datepicker

jQuery UI很強大,其中的日期選擇插件Datepicker是一個配置靈活的插件,我們可以自定義其展示方式,包括日期格式、語言、限制選擇日期範圍、添加相關按鈕以及其它導航等。

官方地址:http://docs.jquery.com/UI/Datepicker,官方示例: http://jqueryui.com/demos/datepicker/


一個不錯的地址,用來DIY jQuery UI界面效果的站點http://jqueryui.com/themeroller/

DatePicker基本使用方法:

<!DOCTYPE html>
<html>
<head>
  <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>

  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>

  <script>
  $(document).ready(function() {
    $("#datepicker").datepicker();
  });
  </script>

</head>
<body style="font-size:62.5%;">

<div type="text" id="datepicker"></div>

</body>
</html>

DatePicker支持鼠標點選日期,同時還可以通過鍵盤控制選擇:

page up/down - 上一月、下一月
ctrl+page up/down - 上一年、下一年
ctrl+home - 當前月或最後一次打開的日期
ctrl+left/right - 上一天、下一天
ctrl+up/down - 上一週、下一週
enter - 確定選擇日期
ctrl+end - 關閉並清除已選擇的日期
escape - 關閉並取消選擇

實用功能:

$.datepicker.setDefaults( settings ) - 全局設置日期選擇插件的參數.
$.datepicker.formatDate( format, date, settings ) - 格式化顯示的日期字符串
$.datepicker.iso8601Week( date ) - 給出一個日期,確實他是一年中的第幾週
$.datepicker.parseDate( format, value, settings ) - 按照指定格式獲取日期字符串

日期格式:

d - 每月的第幾天 (沒有前導零)
dd - 每月的第幾天 (兩位數字)
o - 一年中的第幾天 (沒有前導零)
oo - 一年中的第幾天 (三位數字)
D - day name short
DD - day name long
m - 月份 (沒有前導零)
mm - 月份 (兩位數字)
M - month name short
MM - month name long
y - 年份 (兩位數字)
yy - 年份 (四位數字)
@ - Unix 時間戳 (從 01/01/1970 開始)
'...' - 文本
'' - 單引號
(其它) - 文本

其它標準日期格式:

ATOM - 'yy-mm-dd' (Same as RFC 3339/ISO 8601)
COOKIE - 'D, dd M yy'
ISO_8601 - 'yy-mm-dd'
RFC_822 - 'D, d M y'
RFC_850 - 'DD, dd-M-y'
RFC_1036 - 'D, d M y
RFC_1123 - 'D, d M yy'
RFC_2822 - 'D, d M yy'
RSS - 'D, d M y'
TIMESTAMP - '@'
W3C - 'yy-mm-dd'

參數(參數名 : 參數類型 : 默認值)


altField : String : ''
  將選擇的日期同步到另一個域中,配合altFormat可以顯示不同格式的日期字符串。
  初始:$('.selector').datepicker({ altField: '#actualDate' });
  獲取:var altField = $('.selector').datepicker('option', 'altField');
  設置:$('.selector').datepicker('option', 'altField', '#actualDate');  

altFormat : String : ''
  當設置了altField的情況下,顯示在另一個域中的日期格式。
  初始:$('.selector').datepicker({ altFormat: 'yy-mm-dd' });
  獲取:var altFormat = $('.selector').datepicker('option', 'altFormat');
  設置:$('.selector').datepicker('option', 'altFormat', 'yy-mm-dd');  

appendText : String : ''
  在日期插件的所屬域後面添加指定的字符串。
  初始:$('.selector').datepicker({ appendText: '(yyyy-mm-dd)' });
  獲取:var appendText = $('.selector').datepicker('option', 'appendText');
  設置:$('.selector').datepicker('option', 'appendText', '(yyyy-mm-dd)');  

buttonImage : String : ''
  設置彈出按鈕的圖片,如果非空,則按鈕的文本將成為alt屬性,不直接顯示。
  初始:$('.selector').datepicker({ buttonImage: '/images/datepicker.gif' });
  獲取:var buttonImage = $('.selector').datepicker('option', 'buttonImage');
  設置:$('.selector').datepicker('option', 'buttonImage', '/images/datepicker.gif');  

buttonImageOnly : Boolean : false
  Set to true to place an image after the field to use as the trigger without it appearing on a button.
  初始:$('.selector').datepicker({ buttonImageOnly: true });
  獲取:var buttonImageOnly = $('.selector').datepicker('option', 'buttonImageOnly');
  設置:$('.selector').datepicker('option', 'buttonImageOnly', true);  

buttonText : String : '...'
  設置觸發按鈕的文本內容。
  初始:$('.selector').datepicker({ buttonText: 'Choose' });
  獲取:var buttonText = $('.selector').datepicker('option', 'buttonText');
  設置:$('.selector').datepicker('option', 'buttonText', 'Choose');  

changeMonth : Boolean : false
  設置允許通過下拉框列表選取月份。
  初始:$('.selector').datepicker({ changeMonth: true });
  獲取:var changeMonth = $('.selector').datepicker('option', 'changeMonth');
  設置:$('.selector').datepicker('option', 'changeMonth', true);  

changeYear : Boolean : false
  設置允許通過下拉框列表選取年份。
  初始:$('.selector').datepicker({ changeYear: true });
  獲取:var changeYear = $('.selector').datepicker('option', 'changeYear');
  設置:$('.selector').datepicker('option', 'changeYear', true);  

closeTextType: StringDefault: 'Done'
  設置關閉按鈕的文本內容,此按鈕需要通過showButtonPanel參數的設置才顯示。
  初始:$('.selector').datepicker({ closeText: 'X' });
  獲取:var closeText = $('.selector').datepicker('option', 'closeText');
  設置:$('.selector').datepicker('option', 'closeText', 'X');  

constrainInput : Boolean : true
  如果設置為true,則約束當前輸入的日期格式。
  初始:$('.selector').datepicker({ constrainInput: false });
  獲取:var constrainInput = $('.selector').datepicker('option', 'constrainInput');
  設置:$('.selector').datepicker('option', 'constrainInput', false);  

currentText : String : 'Today'
  設置當天按鈕的文本內容,此按鈕需要通過showButtonPanel參數的設置才顯示。
  初始:$('.selector').datepicker({ currentText: 'Now' });
  獲取:var currentText = $('.selector').datepicker('option', 'currentText');
  設置:$('.selector').datepicker('option', 'currentText', 'Now');  

dateFormat : String : 'mm/dd/yy'
  設置日期字符串的顯示格式。
  初始:$('.selector').datepicker({ dateFormat: 'yy-mm-dd' });
  獲取:var dateFormat = $('.selector').datepicker('option', 'dateFormat');
  設置:$('.selector').datepicker('option', 'dateFormat', 'yy-mm-dd');  

dayNames : Array : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
  設置一星期中每天的名稱,從星期天開始。此內容用於dateFormat時顯示,以及日曆中當鼠標移至行頭時顯示。
  初始:$('.selector').datepicker({ dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'] });
  獲取:var dayNames = $('.selector').datepicker('option', 'dayNames');
  設置:$('.selector').datepicker('option', 'dayNames', ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi']);  

dayNamesMin : Array : ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']
  設置一星期中每天的縮語,從星期天開始,此內容用於dateFormat時顯示,以前日曆中的行頭顯示。
  初始:$('.selector').datepicker({ dayNamesMin: ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa'] });
  獲取:var dayNamesMin = $('.selector').datepicker('option', 'dayNamesMin');
  設置:$('.selector').datepicker('option', 'dayNamesMin', ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa']);  

dayNamesShort : Array : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
  設置一星期中每天的縮語,從星期天開始,此內容用於dateFormat時顯示,以前日曆中的行頭顯示。
  初始:$('.selector').datepicker({ dayNamesShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'] });
  獲取:var dayNamesShort = $('.selector').datepicker('option', 'dayNamesShort');
  設置:$('.selector').datepicker('option', 'dayNamesShort', ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam']);  

defaultDate : Date, Number, String : null
  設置默認加載完後第一次顯示時選中的日期。可以是Date對象,或者是數字(從今天算起,例如+7),或者有效的字符串('y'代表年, 'm'代表月, 'w'代表周, 'd'代表日, 例如:'+1m +7d')。
  初始:$('.selector').datepicker({ defaultDate: +7 });
  獲取:var defaultDate = $('.selector').datepicker('option', 'defaultDate');
  設置:$('.selector').datepicker('option', 'defaultDate', +7);  

duration : String, Number : 'normal'
  設置日期控件展開動畫的顯示時間,可選是"slow", "normal", "fast",''代表立刻,數字代表毫秒數。
  初始:$('.selector').datepicker({ duration: 'slow' });
  獲取:var duration = $('.selector').datepicker('option', 'duration');
  設置:$('.selector').datepicker('option', 'duration', 'slow');  

firstDay : Number : 0
  設置一週中的第一天。星期天為0,星期一為1,以此類推。
  初始:$('.selector').datepicker({ firstDay: 1 });
  獲取:var firstDay = $('.selector').datepicker('option', 'firstDay');
  設置:$('.selector').datepicker('option', 'firstDay', 1);  

gotoCurrent : Boolean : false
  如果設置為true,則點擊當天按鈕時,將移至當前已選中的日期,而不是今天。
  初始:$('.selector').datepicker({ gotoCurrent: true });
  獲取:var gotoCurrent = $('.selector').datepicker('option', 'gotoCurrent');
  設置:$('.selector').datepicker('option', 'gotoCurrent', true);  

hideIfNoPrevNext : Boolean : false
  設置當沒有上一個/下一個可選擇的情況下,隱藏掉相應的按鈕。(默認為不可用)
  初始:$('.selector').datepicker({ hideIfNoPrevNext: true });
  獲取:var hideIfNoPrevNext = $('.selector').datepicker('option', 'hideIfNoPrevNext');
  設置:$('.selector').datepicker('option', 'hideIfNoPrevNext', true);  

isRTL : Boolean : false
  如果設置為true,則所有文字是從右自左。
  初始:$('.selector').datepicker({ isRTL: true });
  獲取:var isRTL = $('.selector').datepicker('option', 'isRTL');
  設置:$('.selector').datepicker('option', 'isRTL', true);  

maxDate : Date, Number, String : null
  設置一個最大的可選日期。可以是Date對象,或者是數字(從今天算起,例如+7),或者有效的字符串('y'代表年, 'm'代表月, 'w'代表周, 'd'代表日, 例如:'+1m +7d')。
  初始:$('.selector').datepicker({ maxDate: '+1m +1w' });
  獲取:var maxDate = $('.selector').datepicker('option', 'maxDate');
  設置:$('.selector').datepicker('option', 'maxDate', '+1m +1w');
       $('.selector').datepicker('option', 'maxDate', '12/25/2012');  

minDate : Date, Number, String : null
  設置一個最小的可選日期。可以是Date對象,或者是數字(從今天算起,例如+7),或者有效的字符串('y'代表年, 'm'代表月, 'w'代表周, 'd'代表日, 例如:'+1m +7d')。
  初始:$('.selector').datepicker({ minDate: new Date(2007, 1 - 1, 1) });
  獲取:var minDate = $('.selector').datepicker('option', 'minDate');
  設置:$('.selector').datepicker('option', 'minDate', new Date(2007, 1 - 1, 1));
       $('.selector').datepicker('option', 'minDate', '12/25/2012');  

monthNames : Array : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
  設置所有月份的名稱。
  初始:$('.selector').datepicker({monthNames:['Januar','Februar','Marts','April','Maj','Juni','Juli','August','September','Oktober','November','December']});
  獲取:var monthNames = $('.selector').datepicker('option', 'monthNames');
  設置:$('.selector').datepicker('option', 'monthNames', ['Januar','Februar','Marts','April','Maj','Juni','Juli','August','September','Oktober','November','December']);  

monthNamesShort : Array : ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
  設置所有月份的縮寫。
  初始:$('.selector').datepicker({monthNamesShort:['Jan','Feb','Mar','Apr','Maj','Jun','Jul','Aug','Sep','Okt','Nov','Dec']});
  獲取:var monthNamesShort = $('.selector').datepicker('option', 'monthNamesShort');
  設置:$('.selector').datepicker('option', 'monthNamesShort', ['Jan','Feb','Mar','Apr','Maj','Jun','Jul','Aug','Sep','Okt','Nov','Dec']);  

navigationAsDateFormat : Boolean : false
  如果設置為true,則formatDate函數將應用到 prevText,nextText和currentText的值中顯示,例如顯示為月份名稱。
  初始:$('.selector').datepicker({ navigationAsDateFormat: true });
  獲取:var navigationAsDateFormat = $('.selector').datepicker('option', 'navigationAsDateFormat');
  設置:$('.selector').datepicker('option', 'navigationAsDateFormat', true);  

nextText : String : 'Next'
  設置「下個月」鏈接的顯示文字。
  初始:$('.selector').datepicker({ nextText: 'Later' });
  獲取:var nextText = $('.selector').datepicker('option', 'nextText');
  設置:$('.selector').datepicker('option', 'nextText', 'Later');  

numberOfMonths : Number, Array : 1
  設置一次要顯示多少個月份。如果為整數則是顯示月份的數量,如果是數組,則是顯示的行與列的數量。
  初始:$('.selector').datepicker({ numberOfMonths: [2, 3] });
  獲取:var numberOfMonths = $('.selector').datepicker('option', 'numberOfMonths');
  設置:$('.selector').datepicker('option', 'numberOfMonths', [2, 3]);  

prevText : String : 'Prev'
  設置「上個月」鏈接的顯示文字。
  初始:$('.selector').datepicker({ prevText: 'Earlier' });
  獲取:var prevText = $('.selector').datepicker('option', 'prevText');
  設置:$('.selector').datepicker('option', 'prevText', 'Earlier');  

shortYearCutoff : String, Number : '+10'
  設置截止年份的值。如果是(0-99)的數字則以當前年份開始算起,如果為字符串,則相應的轉為數字後再與當前年份相加。當超過截止年份時,則被認為是上個世紀。
  初始:$('.selector').datepicker({ shortYearCutoff: 50 });
  獲取:var shortYearCutoff = $('.selector').datepicker('option', 'shortYearCutoff');
  設置:$('.selector').datepicker('option', 'shortYearCutoff', 50);  

showAnim : String : 'show'
  設置顯示、隱藏日期插件的動畫的名稱。
  初始:$('.selector').datepicker({ showAnim: 'fold' });
  獲取:var showAnim = $('.selector').datepicker('option', 'showAnim');
  設置:$('.selector').datepicker('option', 'showAnim', 'fold');  

showButtonPanel : Boolean : false
  設置是否在面板上顯示相關的按鈕。
  初始:$('.selector').datepicker({ showButtonPanel: true });
  獲取:var showButtonPanel = $('.selector').datepicker('option', 'showButtonPanel');
  設置:$('.selector').datepicker('option', 'showButtonPanel', true);  

showCurrentAtPos : Number : 0
  設置當多月份顯示的情況下,當前月份顯示的位置。自頂部/左邊開始第x位。
  初始:$('.selector').datepicker({ showCurrentAtPos: 3 });
  獲取:var showCurrentAtPos = $('.selector').datepicker('option', 'showCurrentAtPos');
  設置:$('.selector').datepicker('option', 'showCurrentAtPos', 3);  

showMonthAfterYear : Boolean : false
  是否在面板的頭部年份後面顯示月份。
  初始:$('.selector').datepicker({ showMonthAfterYear: true });
  獲取:var showMonthAfterYear = $('.selector').datepicker('option', 'showMonthAfterYear');
  設置:$('.selector').datepicker('option', 'showMonthAfterYear', true);  

showOn : String : 'focus'
  設置什麼事件觸發顯示日期插件的面板,可選值:focus, button, both
  初始:$('.selector').datepicker({ showOn: 'both' });
  獲取:var showOn = $('.selector').datepicker('option', 'showOn');
  設置:$('.selector').datepicker('option', 'showOn', 'both');  

showOptions : Options : {}
  如果使用showAnim來顯示動畫效果的話,可以通過此參數來增加一些附加的參數設置。
  初始:$('.selector').datepicker({ showOptions: {direction: 'up' });
  獲取:var showOptions = $('.selector').datepicker('option', 'showOptions');
  設置:$('.selector').datepicker('option', 'showOptions', {direction: 'up');  

showOtherMonths : Boolean : false
  是否在當前面板顯示上、下兩個月的一些日期數(不可選)。
  初始:$('.selector').datepicker({ showOtherMonths: true });
  獲取:var showOtherMonths = $('.selector').datepicker('option', 'showOtherMonths');
  設置:$('.selector').datepicker('option', 'showOtherMonths', true);  

stepMonths : Number : 1
  當點擊上/下一月時,一次翻幾個月。
  初始:$('.selector').datepicker({ stepMonths: 3 });
  獲取:var stepMonths = $('.selector').datepicker('option', 'stepMonths');
  設置:$('.selector').datepicker('option', 'stepMonths', 3);  

yearRange : String : '-10:+10'
  控制年份的下拉列表中顯示的年份數量,可以是相對當前年(-nn:+nn),也可以是絕對值 (-nnnn:+nnnn)
  初始:$('.selector').datepicker({ yearRange: '2000:2010' });
  獲取:var yearRange = $('.selector').datepicker('option', 'yearRange');
  設置:$('.selector').datepicker('option', 'yearRange', '2000:2010');

事件

beforeShow : function(input)
  在日期控件顯示面板之前,觸發此事件,並返回當前觸發事件的控件的實例對象。
  初始:$('.selector').datepicker({ beforeShow: function(input) { ... } });  

beforeShowDay : function(date)
  在日期控件顯示面板之前,每個面板上的日期綁定時都觸發此事件,參數為觸發事件的日期。調用函數後,必須返回一個數組:[0]此日期是否可選(true/false),[1]此日期的CSS樣式名稱(""表示默認),[2]當鼠標移至上面出現一段提示的內容。
  初始:$('.selector').datepicker({ beforeShowDay: function(date) { ... } });  

onChangeMonthYear : function(year, month, inst)
  當年份或月份改變時觸發此事件,參數為改變後的年份月份和當前日期插件的實例。
  初始:$('.selector').datepicker({ onChangeMonthYear: function(year, month, inst) { ... } });  

onClose : function(dateText, inst)
  當日期面板關閉後觸發此事件(無論是否有選擇日期),參數為選擇的日期和當前日期插件的實例。
  初始:$('.selector').datepicker({ onClose: function(dateText, inst) { ... } });  

onSelect : function(dateText, inst)
  當在日期面板選中一個日期後觸發此事件,參數為選擇的日期和當前日期插件的實例。
  $('.selector').datepicker({ onSelect: function(dateText, inst) { ... } });

方法:

destory
  從元素中移除拖拽功能。
  用法:.datepicker( 'destroy' )  

disable
  禁用元素的拖拽功能。
  用法:.datepicker( 'disable' )  

enable
  啟用元素的拖拽功能。
  用法:.datepicker( 'enable' )  

option
  獲取或設置元素的參數。
  用法:.datepicker( 'option' , optionName , [value] )  

dialog
  在dialog插件中打開一個日期插件。
  用法:.datepicker( 'dialog' , dateText , [onSelect] , [settings] , [pos] )  

isDisabled
  確實日期插件是否已被禁用。
  用法:.datepicker( 'isDisabled' )  

hide
  隱藏(關閉)之前已經打開的日期面板。
  用法:.datepicker( 'hide' , [speed] )   

show
.datepicker( 'show' )
  顯示日期插件。
  用法:.datepicker( 'show' )  

getDate
  返回當前日期插件選擇的日期。
  用法:.datepicker( 'getDate' )  

setDate
  設置日期插件當前的日期。date參數可以是數字(從今天算起,例如+7),或者有效的字符串('y'代表年, 'm'代表月, 'w'代表周, 'd'代表日, 例如:'+1m +7d'),null表示當天。
  用法:.datepicker( 'setDate' , date )

2010年1月14日

防止圖片或文章被盜用,鎖右鍵

圖文防拷貝的語法,我花的點時間小測了一下..
有種語法是要鑲在body的標籤裡的,如下,

不過,部落不可能開放Html的原碼讓使用者修改,這樣可是會天下大亂的..

既然如此,那就退而求其次,將放在body中的ondragstart="return false" onselectstart="return false" onContextMenu="return false"改為放在div標籤裡,這樣可以利用在原始碼中修改將文章前後包起來。語法如下,

文章內容..



這個方法可以用在部份圖片或文章不想被拷貝時使用。若是要每篇文章或圖片都要上防拷貝語法,就必須每次在新文章前後加入如上的語法才可。
終於解決了部份網友的問題,但是,既然可以鎖住部份的圖片或文章,為啥不能來個一次鎖到底,整個網站的內容通通都鎖住?!沒錯,所以我又花了點時間,這次改寫了css樣式表中的語法,沒想到成功了!語法如下,

body {
star:expression(document.body.onselectstart = function(){return false;});
}


只要在css樣式表中加入此語法即可,但是你會發現樣式表中本來就有個body的標籤設定,其實,這是不要緊的,兩個body內的設定並不同,也沒有衝突,所以大可放心的給它放進去吧!^ ^
※修正更新語法:
上方的語法僅能鎖住文章內容被選取的功能,以下是圖片與文章都可以鎖住的功能!

body {star:expression(document.body.onselectstart = document.body.oncontextmenu = function(){return false;});}

2010年1月13日

解決Flash內容總是漂浮於頁面頂層的問題

已經有兩個網友向我反應了Flash MP3 Player無法和lightbox之類插件兼容的問題,其症狀為,當打開lightbox效果的圖片時,flash movie會漂浮在整個頁面的最頂層,破壞了lightbox的效果。

今天做了一點小小的調查,原來瀏覽器渲染嵌入頁面的內容如flash movie或Java applet時,默認將它們放置於頁面的最上層,忽略其z-index屬性。所以,像lightbox這類插件,靠設置覆蓋層的z-index屬性來營造 高亮效果的js腳本,基本無法做到覆蓋掉頁面上的flash movie。

Adobe公司給出了對於類似問題的解決辦法,就是設置flash movie的wmode屬性。

這個屬性用於控制Flash 的窗口模式,其有三個取值:

window 模式

默認情況下的顯示模式,在這種模式下flash player有自己的窗口句柄,這就意味著flash影片是存在於Windows中的一個顯示實例,並且是在瀏覽器核心顯示窗口之上的,所以flash只 是貌似顯示在瀏覽器中,但這也是flash最快最有效率的渲染模式。由於他是獨立於瀏覽器的HTML渲染表面,這就導致默認顯示方式下flash總是會遮 住位置與他重合的所有DHTML層。

但是大多數蘋果電腦瀏覽器會允許DHTML層顯示在flash之上,但當flash影片播放時會出現比較詭異的現象,比如DHTML層像被flash刮掉一塊一樣顯示異常。

Opaque 模式

這是一種無窗口模式,在這種情況下flash player沒有自己的窗口句柄,這就需要瀏覽器需要告訴flash player在瀏覽器的渲染表面繪製的時間和位置。這時flash影片就不會在高於瀏覽器HTML渲染表面而是與其他元素一樣在同一個頁面上,因此你就可 以使用z-index值來控制DHTML元素是遮蓋flash或者被遮蓋。

Transparent 模式

透明模式,在這種模式下flash player會將stage的背景色alpha值將為0並且只會繪製stage上真實可見的對象,同樣你也可以使用z-index來控制flash影片的 深度值,但是與Opaque模式不同的是這樣做會降低flash影片的回放效果,而且在9.0.115之前的flash player版本設置wmode=」opaque」或」transparent」會導致全屏模式失效。

瞭解了各種模式的實現方式和意義在以後的開發中就可以按照具體情況選擇設置wmode屬性的值了。

我的插件之所以出現問題,就是因為我把wmode的值設定為了window,當然,這也是默認的值。從三種屬性值的具體含義中,我們可以知道,無論 是將wmode設定為opaque或者transparent,都可以解決問題,不過網上搜出來的結果,普遍只說了設成transparent這種,並且 普遍不講理由為何。

參考資料:

flash wmode 參數詳解

Flash content displays on top of all DHTML layers

How to make a Flash movie with a transparent background



作者:Charles

原文鏈接:解決Flash內容總是漂浮於頁面頂層的問題

《Becomin' Charles》版權所有,轉載時必須以鏈接形式註明作者和原始出處及本聲明。

2009年6月9日

javaScript 設定 style 的注意事情 - CSS Properties To JavaScript Reference Conversion

CSS Properties To JavaScript Reference Conversion


我想大家都會在設定javascript時會有一些style的問題。因為style和javascript在css上面的寫法會有些不同。常讓ie無法套用精心設計的css,讓創意無法發揮。


一般大家都會使用setArttribute('屬性','值'),但卻對style,時好時壞。


讓我們比較簡單的方式教大家設定出style的屬性。


document.getElementById(div_id).style.JavaScript的CSS'屬性'表示= "CSS 屬性_value";


請參照下表做比對。



















































































































































































































































































































CSS Property (STYLE的CSS'屬性'表示) JavaScript Reference (JavaScript的CSS'屬性'表示)
background background
background-attachment backgroundAttachment
background-color backgroundColor
background-image backgroundImage
background-position backgroundPosition
background-repeat backgroundRepeat
border border
border-bottom borderBottom
border-bottom-color borderBottomColor
border-bottom-style borderBottomStyle
border-bottom-width borderBottomWidth
border-color borderColor
border-left borderLeft
border-left-color borderLeftColor
border-left-style borderLeftStyle
border-left-width borderLeftWidth
border-right borderRight
border-right-color borderRightColor
border-right-style borderRightStyle
border-right-width borderRightWidth
border-style borderStyle
border-top borderTop
border-top-color borderTopColor
border-top-style borderTopStyle
border-top-width borderTopWidth
border-width borderWidth
clear clear
clip clip
color color
cursor cursor
display display
filter filter
font font
font-family fontFamily
font-size fontSize
font-variant fontVariant
font-weight fontWeight
height height
left left
letter-spacing letterSpacing
line-height lineHeight
list-style listStyle
list-style-image listStyleImage
list-style-position listStylePosition
list-style-type listStyleType
margin margin
margin-bottom marginBottom
margin-left marginLeft
margin-right marginRight
margin-top marginTop
overflow overflow
padding padding
padding-bottom paddingBottom
padding-left paddingLeft
padding-right paddingRight
padding-top paddingTop
page-break-after pageBreakAfter
page-break-before pageBreakBefore
position position
float styleFloat
text-align textAlign
text-decoration textDecoration
text-decoration: blink textDecorationBlink
text-decoration: line-through textDecorationLineThrough
text-decoration: none textDecorationNone
text-decoration: overline textDecorationOverline
text-decoration: underline textDecorationUnderline
text-indent textIndent
text-transform textTransform
top top
vertical-align verticalAlign
visibility visibility
width width
z-index zIndex



2009年5月8日

extJs 2.0 如何修改 disabled 樣式

原本設定的樣式。太醜了。就拿掉就可以了。

disabled: true,
disabledClass: ''

extJs 2.0學習筆記

  這一篇翻譯自extJs 2.0官方文檔。花了我一個晚上加一個上午的時間才搞定。這篇是關於config的。

  我在網上查了很久,關於ExtJs的core部分的中文文檔還是有不少,但是關於panel,window這些呢就好像不大齊全,而且,在js堂,它的文檔翻譯還在1.1。所以呢想翻譯出來,以後大家也好查閱。

  本人js水平、英文水平都有限,還好,通過看源代碼兩相印證,終於還是搞出來了。歡迎各位提出寶貴的意見。事實上,只要搞定了panel,其也組件的config差不多。大同小異。嘿嘿。一通百通啊。

activeItem : String/Number
用於設置當前活動的子組件,取值為此子組件的序號或者是id。但是它只能應用於那種一次只能顯示一個子組件的佈局類,例如:Ext.layout.Accordion, Ext.layout.CardLayout和Ext.layout.FitLayout。

allowDomMove;Boolean
是否可以在組件呈現的過程中移動組件的dom節點。默認值為true。

animCollapse : Boolean
設置是否在面板收縮時起用動畫,如果Ext.Fx有效(被包含進來)則默認為true,否則為false。

applyTo:Mixed
x-panel對應的div的id。


autoDestroy : Boolean
如果要把一個子組件從panel中移除且此值為true,則在移除的過程中自動會銷毀此組件,返之,則不會,必須要手工銷毀,默認值為true。


autoHeight : Boolean
如果為true,把this.el.dom.style.height='auto'。默認值為false。

autoScroll : Boolean
為true時,則把this.body.dom.style.overflow='auto'。默認值為false。

autoShow : Boolean
為true時,檢查組件是否被設成隱藏,如果有,則移除這個效果。

autoWidth : Boolean
同autoHeight一樣。。

baseCls : String
this.baseCls的class(默認值為'x-panel')

bbar : Object/Array
面板底部的工具欄。它可是一個Ext.Toolbar對象,也可以是一個toolbar的 config對象,或者是一個要加入到工具欄的按鈕的config的數組。注意:這個屬性在render後就無效了,如果要在render後使用它,請使用 getBottomToolbar獲得引用。

bodyBorder : Boolean
如果為true則為this.el對應的元素顯示邊框,默認值為true。這只在border==true時才有效。如果border==true且bodyBorder==false,那麼將顯示1px的inset邊框。給予this.el inset的效果。

bodyStyle : String/Object/Function
要應用到this.el上的css class。它的格式需求與Ext.Element.applyStyle一樣,默認值為null。

border : Boolean
也是設this.body的邊框的,默認值為true,此時,默認情況下邊框為2px。當然,它還會被bodyBorder影響。

buttonAlign : String
加入到面板中的按鈕的對齊方式,合法值為:'right','left','cente',默認值為'right'。

buttons : Array
Ext.Button的config數組,用於加入按鈕到面板的footer中。

cls : String
this.el的class。

collapseFirst : Boolean
當顯示title bar時,是否總把收縮、展開按鈕放在所有其他按鈕的前面。默認值為true。

collapsed : Boolean
在呈現時,是收縮還是展開。為true則收縮,默認值為false。


collapsedCls : String
當面板處於收縮狀態時,this.el所對應的class,默認值為'x-panel-collapsed'。

collapsible : Boolean
此面板是否可收縮或者說是否能顯示收縮、伸展按鈕。真為顯示。默認值為false。

contentEl : String
一個已存在的dom的id。作用是用於在afterRender後把它this.body.dom.appendChild掉。默認值為''。

ctCls : String
設this.container的class。

defaultType : String
當在構造函數中用items填加新成員時,如果沒有設xType,那麼就會以這個默認類型為xType加入組件。默認值為'panel'。


defaults : Object
加入此組件的所有子組件的默認config。如果這些加入的子組件設了config的話就以新設的為準。例如:{bodyStyle:'padding:15px'}。


disabledClass : String
當組件被設成disabled時的css,默認值為:"x-item-disabled"。

draggable : Boolean
是否能被拖動。默認值為false。當然也可以是一個Ext.Panel.DD config。Ext.Panel.DD是一個internal但非公開的類(我沒有找到它的源代碼),它的作用是移動一個proxy元素 (Element)以代替本應跟隨鼠標移動的panel.el。但是它在拖動過程中、放下時不提供任何其他動作,也就是說,如果你不作處理的話,鼠標一鬆,panel仍然在老地方。它是Ext.dd.DragSource的子類,所以,必須通過實現Ext.dd.DragDrop的方法來產生動作。示例代碼如下:

new Ext.Panel({
title: 'Drag me',
x: 100,
y: 100,
renderTo: Ext.getBody(),
floating: true,
frame: true,
width: 400,
height: 200,
draggable: {
// Config option of Ext.Panel.DD class.
// It's a floating Panel, so do not show a placeholder proxy in the original position.
insertProxy: false,

// Called for each mousemove event while dragging the DD object.
onDrag : function(e){
// Record the x,y position of the drag proxy so that we can
// position the Panel at end of drag.
var pel = this.proxy.getEl();
this.x = pel.getLeft(true);
this.y = pel.getTop(true);

// Keep the Shadow aligned if there is one.
var s = this.panel.getEl().shadow;
if (s) {
s.realign(this.x, this.y, pel.getWidth(), pel.getHeight());
}
},

// Called on the mouseup event.
endDrag : function(e){
this.panel.setPosition(this.x, this.y);
}
}
}).show();



elements : String
一個panel有五個部分:header、tbar、body、bbar、footer。 elements就是保存當前panel包含了幾個部分,例如,一個panel有header、body,那麼:element=='body,header',默認值為:'body'。


floating : Boolean
為true的話,它會使panel.el.style.position=absolute。並且,默認情況下帶有shimming和shadow。為false則不改變原有顯示方式。
注意:把floating設為true會導致panel以offsets大量負偏移的方式隱藏。這個諸 位試一下就曉得了。所以呢,如果設了 floating=true。那麼,你render後最好還要setPostion(x,y)一下。當然如果你讓面板浮動,也要把width設成一個固定值,不然,它會向右擴展到viewport的邊緣。


footer : Boolean
為true則明確地創建footer,為false就不創建,默認情況下,如果對footer沒有什麼特殊的,那麼當一個或多個按鈕被加到footer上面時,footer會被自動創建。


frame : Boolean
為true的話呢就就在panel外面加上自定義的圓角邊框,為false的話就是1px寬的長方形邊框。


header : Boolean
為true時header被創建,反之不被創建,默認情況下,當header不處於特殊情況時,如果title被設置,它會被自動創建,否則不會被創建,如是果title被設置,但是header為false,那麼header也不會被創建。


headerAsText : Boolean
為真是在header中顯示title,為假時隱藏它。默認值為true.


height : Number
panel的高度,默認為auto。


hideBorders : Boolean
為true時,隱藏panel的所有子組件的邊框,為false則尊從子組件原有邊框設置。

hideCollapseTool : Boolean
當collapsible=true且hideCollapseTool=true時,則隱藏控制收縮、伸展的那個按鈕,為false時就顯示它,默認值為false。


hideMode : String
隱藏模式,有三種: "visibility" (css visibility), "offsets" (negative offset position) and "display" (css display) - defaults to "display"。

hideParent : Boolean
用於設置是否隱藏組件的容器,即component.container。

html : String/Object
一個html碎片,或者是滿足DomHelper語法的object,它用於設置panel的body部分的內容。默認值為''。

iconCls : String
用於設置header上的圖標的class。例如:.my-icon { background: url(../images/my-icon.gif) 0 6px no-repeat !important;}


id : String
一個為component統一分配的id值。默認值為panel.el.id。

items : Mixed
單個成員或一個子組件的數組。每個成員都可以是任何從Ext.Component繼承的object。

它的成員可以是component的引用,這樣就會馬上render,也可以是component的config。這時就會lazy render。當然,在config中,要注意加上xtype。這個東西不用講了吧。

關於xtype的所有取值情況,請見Ext.Component.xtype的config說明。裡面有講到。關於它的值,其實很多例子上都有,如果傳一個成員,則像:items:{……},傳多個的話呢,就像:[{……},{……}]。

keys : Object/Array
一個keyMap config object。用於設置快捷鍵的。默認值為null。


layout : String
設置panel.container的佈局。如果沒有設置,那麼默認為 Ext.layout.ContainerLayout,合法的值有:absolute, accordion, anchor, border, card, column, fit, form和table。如果要設置佈局的細節,則要用到layoutConfig了。


layoutConfig : Object
用於設置佈局細節的,當layout有合法設置時它才有效果。如果要知道關於這個config的設置細節,請見各佈局類:
Ext.layout.Absolute
Ext.layout.Accordion
Ext.layout.AnchorLayout
Ext.layout.BorderLayout
Ext.layout.CardLayout
Ext.layout.ColumnLayout
Ext.layout.FitLayout
Ext.layout.FormLayou
Ext.layout.TableLayout

listeners : Object
一個config對象用於包含一個或多個事件handler,它被addListener使用來註冊事件。

maskDisabled : Boolean
是否在panel.disabled的時候顯示mask。為true顯示。反之不顯示。
默認情況下,panel哪怕在disabled時,它的子元素也顯示得很正常,用戶根本不知道這個panel被禁用了,這給用戶帶來困擾,但是,有了mask,用戶就能得到提示,哦,這個panel是不可用的,被禁用了。這給用戶帶來了新的體驗。


minButtonWidth : Number
panel上所有按鈕的最小寬度,單位是px。

monitorResize : Boolean
為true時,它自動監控window的resize事件,並且讓viewport因此而變化。這個東西的經典應用就是為layout服務,而不用我們手工去調整某些組件的大小來適應窗口大小的變化。


overCls : String
當鼠標放到panel.el上面時的class。最爽的是,當鼠標out時,它會被自動刪除,從而產生hover效果。


pageX : Number
組件相對於頁面的x坐標

pageY : Number
組件相對於頁面的y坐標

plugins : Object/Array
一個對象或對象數組,它為component提供自定義的功能。每個對象都是一個插件的引用,當然,前提是這個插件定義了init方法,在component初始化時,這個init方法將被調用。沒用著。不說了。難翻譯啊。

renderTo : Mixed
Ext.get(panel.renderTo)就是panel.container。用語言說不清楚,這樣直接了當。

shadow : Boolean/String
為true就給panel顯示一個陰影,為false不顯示。當然,也可設置成為shadow的類型,詳情見Ext.Shadow、Ext.Shadow.mode。注意,這個選項只有在floating = true時才發生作用。

shadowOffset : Number
陰影偏移,默認值為4,只有在floating = true時才發生作用。

shim : Boolean
是否為組件創建shim,什麼是shim呢?存在這樣的情況,用div做的菜單,但是,好死不死有個 applet或flash蓋在上面的話,那菜單就會被蓋在下面。這件事情曾經一度讓b/s人員鬱悶,ext提供一個通用的解決方案,在要避免這個問題的組件的同一位置創建一個與它大小一樣的iframe,且使得這個組件的z-index大於iframe。由於iframe不會被其他東西遮住,所以,z- index在iframe之上的東西也不會被遮,iframe相當於個墊子,把我們要用的東西墊高了,而shim英語裡面也是薄墊片的意思。高呼 extjs萬歲。當然,iframe的src必須為''。

stateEvents : Array
事件數組,當這此事件觸發時,組件狀態被保存。

stateId : String
用於管理組件狀態的id,默認值為組件的id.

stateful : Boolean
一個標誌,它表示組件在創建時是否從某個地方加載組件狀態。哪些屬性能作為狀態保存呢?只有internal屬性可以。
為了讓組件狀態能保存,組件狀態管理器提供者必須實現Ext.state.Provider,也就是要實重寫它的set、get方法以保存/重讀鍵/值對,一個內鍵的提供者是: Ext.state.CookieProvider。

為當前頁面設置狀態提供者的方法如下:
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());

組件試圖在stateEvents裡面配置了事件時保存狀態。你可以自己寫點代碼進行一處理,如在:beforestaterestore, staterestore, beforestatesave和statesave事件的處理代碼中。

style : String
一個應用於panel.el上的樣式,語法必須滿足Ext.Element.applyStyles的接口。


tabTip : String
當panel是Ext.TabPanel中的一頁時,為這個panel設tooltips的。不過,在render之前得先調用Ext.QuickTips.init()初始化一下。

tbar : Object/Array
panel頂部的工具欄,它可以是一個Ext.Toolbar,也可以是一個按鈕數組或一個按鈕的config。注意:在render之後,這個引用就沒用了。如果要處理它請使用getTopToolbar。

title : String
顯示在panel的header中的標題,當title被設置時,header就會被創建,除非header 被設成false。如果你需要title,但不是在panel創建時,而是在之後的某個時刻,這時你需要為title設置一個非空值(如一個空格)或者是把header設為true。這樣,panel在創建時才會創建header,不然,header將不會被創建。

titleCollapse : Boolean
當collapsible = true且titleCollapse=true時,用戶點擊panel標題欄的任意一處都會產生摺疊/伸展效果,否則則只能通過單擊那個按鈕(上文有講到)來產生這個效果了。


tools : Array
一個工具欄按鈕數組,這個工具欄非同一般哦,不是tbar,也不是bbar,而是header上的標題欄,header上的標題欄是怎樣的概念?你看到的panel的關閉按鈕這個鈕,超爽吧。每個工具欄元素以一個Element引用的方式向開發人員公開,通過
   tools.的方式引用。暴爽。
每個工具欄成員的config要包含下面屬性:
id:string
  必需的,工具欄按鈕的類型,可取值如下:

toggle (Created by default when collapsible is true)
close
minimize
maximize
restore
gear
pin
unpin
right
left
up
down
refresh
minus
plus
help
search
save
print

handler : Function
必需,當按鈕被單擊時被執行。它的參數說明如下:
  event:Ext.EventObject
  toolel:Ext.Element
  Panel : Ext.Panel宿主panel

scope : Object
qtip:String/Object
一個tips字符串或者是tips config,用於Ext.QuickTip.register.

hidden : Boolean
on : Object
自定義事件處理器的config,為addListener所用。


示例如下:
tools:[{
id:'refresh',
qtip: 'Refresh form Data',
// hidden:true,
handler: function(event, toolEl, panel){
// refresh logic
}
}]
  注意:除了toggle之外,其他工具欄成員都只是提供一個可視化的圖標,沒有任何功能,所以,如果你要加入它們,得自己寫處理函數。


width : Number
component的寬度,單位用px,默認值為:auto。

x : Number
獲得組件的x,相當於panel.el.style.left

xtype : String
這個東西不用說了,見Ext.Component的config裡面的xtype。

y : Number
與x同理。

2009年1月13日

function toggleCheckAll(checkBool, prefix){

var thisForm = document.article;

var elementCount = thisForm.length;

for (i = 0; i < elementCount; i++){

var thisElement = thisForm.elements[i];

if (thisElement.type != 'checkbox') continue;

if (thisElement.name != prefix) continue;

thisElement.checked = checkBool;

}

}

2008年12月29日

EXT核心API詳解(一)-Ext

Ext類

addBehaviors( Object obj ) : void
對選擇的元素 應用事件偵聽器,事件名以@附加在結尾,例如
addBehaviors({
// id=foo下所有的a標籤加入click事件
'#foo a@click' : function(e, t){
// do something
},
// 用,分隔多個選擇器
'#foo a, #bar span.some-class@mouseover' : function(){
// do something
}
});


apply( Object obj, Object config, Object defaults ) : Object
從config拷貝所有的屬性到obj,如果有defaults參數,也將拷貝其屬性到obj

applyIf( Object obj, Object config ) : Object
從config拷貝所有屬性至obj(如果obj未定義相應屬性)

decode(Object obj) : String
編碼一個對象/數組或其它值為一個json格式字符串(支持對象,數組,日期,字符串)

destroy( Mixed arg1, Mixed (optional), Mixed (optional) ) : void
嘗試去移除每個傳入的對象,包括DOM,事件偵聽者,並呼叫他們的destroy方法(如果存在)


each( Array/NodeList/Mixed array, Function fn, Object scope ) : void
利用array中的每個元素迭代調用fn.直到fn返回假,調用格式fn.call(scope || array[i], array[i], i, array);


encode(String json) : Object
將一個json格式字符串反序列化為對象

escapeRe( String str ) : String
為字符串正則編碼將.在*+?^${}()|[]/\字符前加\

extend( Object subclass, Object superclass, [Object overrides] ) : void
從superclass類繼承subclass,overrides參數是要重載的方法列表,詳見override

fly( String/HTMLElement el, [String named] ) : Element
得到全局共享的一個浮動元素el,如果有多個浮動元素可以使用命名以避免潛在的衝突

get( Mixed el ) : Element
得到一個Element對象,參數可以是id或DOM節點或已存在的Element對象

getBody() : Element
得到當前文檔的body對象

getCmp( String id ) : Component
通過id得到一個Component對象


getDoc() : Element
得到當前文檔

getDom( Mixed el ) : HTMLElement
通過id或節點或Element對象返回一個DOM節點


id( [Mixed el], [String prefix] ) : String
為對象el生成一個惟一id,如果對象本身已有id,將不會被改變(可以使用前導符prefix)


isEmpty( Mixed value, [Boolean allowBlank] ) : Boolean
判斷值是否為空,null, undefined或空字符串將返回真,如果allowBlank定義為真,空字符串將不被視為空

namespace( String namespace1, String namespace2, String etc ) : void
創建一個命名空間,例
Ext.namespace('Company', 'Company.data');
Company.Widget = function() { ... }
Company.data.CustomStore = function(config) { ... }

num( Mixed value, Number defaultValue ) : Number
將value轉為數值,如果value不是合法的數值類型,將返回defaultValue,其實defaultValue並不一定要求是數值類型,只要你願意


onReady( Function fn, Object scope, boolean override ) : void
當文檔準備好了之後引發fn,發生在page的onload事件之前,並且圖片此時都還沒有載入,scope定義執有者,override定義scope是否有默認的選擇


override( Object origclass, Object overrides ) : void
利用overrides重寫origclass的方法,例
Ext.override(MyClass, {
newMethod1: function(){
// etc.
},
newMethod2: function(foo){
// etc.
}
});

query( String path, [Node root] ) : Array
通過path,在root中選擇節點數組,path可以是以下四種選擇器之一
[元素選擇器] 例:
* 任意節點
E 一個E標籤元素
E F 祖先節點為E的F節點
E > F 或 E/F 父節點為E的F節點
E + F 前一個兄弟節點為E的F節點
E ~ F 前面的兄弟節點中有E的F節點
[屬性選擇器] 例:
E[foo] 有foo屬性的E節點
E[foo=bar] 有foo屬性值為bar的E節點
E[foo^=bar] foo屬性以bar開始的E節點
E[foo$=bar] foo屬性以bar結尾的E節點
E[foo*=bar] foo屬性中有bar字符串的E節點
E[foo%=2] foo屬性能被2整除的E節點
E[foo!=bar] foo屬性值不為bar的E節點
[偽類選擇器] 例:
E:first-child E節點是父節點中第一個子節點
E:last-child E節點是父節點中最後一個子節點
E:nth-child(n) E是父節點中每n個節點
E:nth-child(odd) E是父節點中的奇數節點
E:nth-child(even) E是父節點中的偶數節點
E:only-child E是父節點中惟一的子節點
E:checked checked屬性為真的節點
E:first 子孫節點中的第一個E節點
E:last 子孫節點中的最後一個E節點
E:nth(n) 子孫節點中的第n個E節點
E:odd E:nth-child(odd)的簡寫
E:even E:nth-child(even)的簡寫
E:contains(foo) innerHTML屬性中含有foo的E節點
E:nodeValue(foo) E節點中包含一個值為foo的文本節點
E:not(S) 不匹配簡單選擇器S的E節點
E:has(S) 有能匹配簡單選擇器S的子節點的E節點
E:next(S) 下一個兄弟節匹配簡單選擇器S的E節點
E:prev(S) 前一個兄弟節匹配簡單選擇器S的E節點
type( Mixed object ) : String
判斷對象類型,如果不是下列值之一將返回false
[樣式選擇器] 例:
E{display=none} display屬性值為none的E節點
E{display^=none} display屬性值以none開始的E節點
E{display$=none} display屬性值以none結束的E節點
E{display*=none} display屬性值含有none子字串的E節點
E{display%=2} display屬性值能被2整除的E節點
E{display!=none} display屬性值不等於none的E節點


select( String/Array selector, [Boolean unique], [HTMLElement/String root] ) :CompositeElementLite/CompositeElement
在root內通過樣式選擇器或元素數組selector選擇元素或元素列表,unique指示是否只選擇惟一值

urlDecode( String string, [Boolean overwrite] ) : Object
將url格式字符串string解碼為json對象,overwrite參數指示是否不重寫已存在的對象,例
Ext.urlDecode("foo=1&bar=2"); //返回 {foo: 1, bar: 2}
Ext.urlDecode("foo=1&bar=2&bar=3&bar=4"); //返回 {foo: 1, bar: 4}.
Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", true); //返回 {foo: 1, bar: [2, 3, 4]}.

urlEncode( Object o ) : String
將json對象編碼為url格式字符串,參見urlDecode

type( Mixed object ) : String
得到object類型,如果不為以下列舉值之一則返回false
string/number/boolean/function/object/array/regexp/element/nodelist/textnode/whitespace

Ext 筆記 1230-1

1. Ext.get(id)可以取得一個Ext object


2. Ext.get(id).dom
可以取得dom object(也就是getElementById的功能)


3. 透過 Ext.get(id).on('event_name',function(e){ your event handle process.... } )


event_name: 就是你要處理的event的種類,像是click,error,load,mouseover,mousedown,mouseup等等。
function:可以傳一個callback function或是向上面一樣,直接將程式寫在裡面。




4. addKeyListener 替物件增加偵測按鍵的功能
(可以利用在textbox上,偵測按鍵,只允許輸入數字)

5. Ext.get(id).addClass()
可以替物件設定多組css class

6. Ext.select



以下是特效的method



7. Ext.get(id).highlight()
讓指定的dom 變色,再漸漸變回原色。 點這裡看 Ext範例
這個範例讓使用者在勾選checkbox以後才顯示分類的dropdownlist
這樣做在一些UI的呈現上,可以保持畫面的整潔,讓使用者更清楚自己的決定。



8.Ext.get(id).slideIn('r',{callback:test});
讓指定的物件依照特定方向展開,相對的有展開當然有收起囉,
你可以用slideOut收起物件 。點這裡看 Ext範例



r 表示從右邊界的中央展開物件(ex: div)
其他還有這些參數值
tl 左上角(默認)
t 上居中
tr 右上角
l 左邊界的中央
c 居中
bl 左下角
b 下居中
br 右下角



{}括號裡有很多其他的參數可以設定,其中callback參數是用來設定callback function,當slideIn執行完畢,就會執行callback function裡面的動作。


9. Ext.get(id).fadeIn( {duration: time, callback: method_name})



這function可以讓物件有淡入淡出的效果,
duration: 要花多久的時間完成淡入或淡出的動作,
callback: 完成淡入淡出的動作以後,會執行這個function

2008年12月17日

EXT GETDOM

var count = Ext.getDom('digg_count').innerHTML;
Ext.get("digg_count").update(++count);

2008年9月10日

IE6支持PNG透明(alpha通道)的4種方法

想 特別說明一下,IE6與生俱來就支持png8的索引色透明度,但不支持png的 alpha 透明度。而我們一直要解決的是讓IE6支持PNG的 alpha 透明度。下面我收集整理了4種方法,但都是以濾鏡、Js、css 等作為基礎模擬還原效果,雖然沒有真正的解決alpha透明度問題,但也總算解決了燃眉之急。

  • IE6支持png8透明:

    IE6與生俱來就支持png8的索引色透明度,但不支持png或8位以上的 alpha 透明度。而對於非動畫的GIF建議你使用PNG8,因為體積會更小

    測試實例:http://blog.gulu77.com/demo/200809/test_IE6png8/

  1. AlphaImageLoader 篩選器

  2. PNG Transparency in IE

  3. IE PNG Fix v1.0 / 2.0 Alpha 2

    • 使用簡介:頁面標籤使用behavior:url(」iepngfix.htc」);來調用外部包含js、css的iepngfix.htc文件來修正PNG alpha 透明度。
    • 官方原文:http://www.twinhelix.com/css/iepngfix/ go
    • 測試實例:http://blog.gulu77.com/demo/200809/test_iepngfix/
  4. IE7/IE8 JavaScript library

    • 使用簡介:ie7/ie8-js是一個解決IE與W3C標準的衝突的JS庫,使微軟的IE的行為像一個Web標準兼容的瀏覽器,支持更多的W3C標準。
    • 官方原文:http://code.google.com/p/ie7-js/ go
    • 測試實例:http://blog.gulu77.com/demo/200809/test_ie7-js/
  5. 全部實例打包下載:http://blog.gulu77.com/demo/200809/test_png.rar

2007年11月2日

SWFObject 簡化宣告FLASH的HTML編碼並SEO的寫法。

使用swfobject 可以讓你的HTML中關於FLASH的部份更加簡單!


<div id="movie" style="position:absolute"></div>

//利用ID="MOVIE" 有加藍色的部份要相同;
<script type="text/javascript">

var movie = new FlashObject("./swf/index.swf", "index", "120", "100", "7", "#ffffff");

//設定MOVIE內要放入的 FLASH位置和大小,背景;
movie.addParam("quality", "high");

//FLASH的品質;
movie.addParam("wmode", "transparent");

//底色透明;
movie.addParam("menu", "false");

//選單是否打開右鍵;
movie.write("movie");


</script>



可以在<div id="movie" style="position:absolute"></div>之間塞入你要的"關鍵字"。
看看!是不是很簡單呢?不需要像Adobe所提供的方式,方便許多!去看看Adobe的網站,自己都不使用AC_RunActiveContent.js的方式,也是類似使用swfobject的方式,複雜的原始碼全部包給了JS,讓UI部分的原始碼更加精簡!

小王子編輯


相關文章:SEO技巧-如何在Flash(.SWF)加關鍵字...


2007年9月24日

Google Maps API 實作範例

  本篇文章介紹如何利用 Google Maps API 來把 Google 所提供的地圖服務內嵌到你的網頁中,並且將座標定至你所要標記的地點。

步驟1:先申請一組 Google Maps API Key
  1. [ 按此進入 ] Google Maps API Key申請頁面。

  2. 將核取控制項打勾,並將欲申請Google Mass API的網址填入(例如:http://my-web-design.blogspot.com/)。

  3. 按 "Generate API Key" 取得 Key。

  4. 最後會出現三個方塊,分別是你取得的 Key,你指定的 URL,以及一個範例。

    範例中會有如下的片段:

    <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAsYV7UusYC8W-CUCDLpFQYRREFBcOGxpqCCUdK6ZnJW0Tb_Kj_BRWDfzZYc6lwJiQloNiuOKFThoUBQ"
    type="text/javascript"></script>

    紅字的部份就是你的 Google 地圖 key,此段JavaScript需放至<head></head>之間。

步驟2:取得欲標記的地點的經緯座標值

  1. [ 按此進入 ] Google Maps搜尋頁面。

  2. 輸入欲標記的地點的地址或名稱,並按"搜尋地圖"(例如:台南火車站)。

  3. 確認搜尋結果無誤後,請按"連結至此網頁",取得地圖的連結。

    連結如下:

    http://maps.google.com/maps?f=q&hl=zh-TW&geocode=&q=%E5%8F%B0%E5%8D%
    97%E7%81%AB%E8%BB%8A%E7%AB%99&sll=22.996733,120.212465
    &sspn=0.00721,0.014462&ie=UTF8&ll=22.997686,120.212467&spn=0.00721,0.014462
    &z=16&iwloc=addr&om=1

    紅字的部份分別是經度及緯度。


步驟3:將以下範例程式片段copy到<body></body>之間:
<!--Google Map 顯示的位置,可自由決定大小-->
<div id="mymap" style="width: 500px; height: 500px"></div>

<!--以下為控制Google Maps的JavaScript-->
<script type="text/javascript">

//<![CDATA[
var map = new GMap(document.getElementById("mymap"));

//設定要顯示的控制項
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());

//決定你 Google 地圖的中心點位置和縮放大小
map.setCenter(new GLatLng(22.996733, 120.212465), 16);

//標記在 Google 地圖上的經緯度
var point = new GLatLng(22.996733, 120.212465);
var marker = new GMarker(point);
map.addOverlay(marker);

//在地圖上放置標點說明
var html = "台南火車站";
map.openInfoWindowHtml (map.getCenter(), html);

//]]>
</script>



詳細說明:
//設定要顯示的控制項
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());

Google Maps API 內建四種控制項:

  1. GLargeMapControl : 適合給大型地圖的控制項。

  2. GSmallMapControl : 適合給小型地圖的控制項。

  3. GSmallZoomControl : 只有 Zoom Level 的調整,沒有地圖移動控制。

  4. GMapTypeControl : 顯示地圖型態切換的控制項。

//決定你 Google 地圖的中心點位置和縮放大小
map.setCenter(new GLatLng(22.996733, 120.212465), 16);

設定 Google 地圖的中心點位置和縮放大小:

  • setCenter(GLatLng(經度, 緯度), [+ 放大(近)] -> [- 縮小(遠)]);

//標記在 Google 地圖上的經緯度
var point = new GLatLng(22.996733, 120.212465);
var marker = new GMarker(point);
map.addOverlay(marker);

//在此標記所要顯示的資訊
var html = "台南火車站";
map.openInfoWindowHtml (map.getCenter(), html);

在地圖上標記地點:

  1. 設定座標值:
    var point = new GLatLng(22.996733, 120.212465);
    var marker = new GMarker(point);

  2. 在地圖上放置標點 :
    map.addOverlay(marker);

  3. 在地圖上放置標點說明 :
    var html = "台南火車站";
    map.openInfoWindowHtml (map.getCenter(), html);

2007年9月7日

上傳圖片直接預覽

  此javascript可以在上傳圖片的時候,立即顯示所選擇的圖片,使用方法很簡單,將下面些段程式碼複製貼到<body></body>裡就OK了:

[ 按此看範例 ]

2007年9月3日

JavaScript圖片跑馬燈

  這是個JavaScript版的圖片跑馬燈,可以避免用Marquee來實作跑馬燈時,結尾與開始交接的地方沒辦法連貫的問題,使用方法很簡單,將下面些段程式碼複製貼到<body></body>裡就OK了:

[ 按此看範例 ]