<?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>Life["Breathing"] &#187; jquery</title>
	<atom:link href="http://blog.hsin.tw/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.hsin.tw</link>
	<description></description>
	<lastBuildDate>Mon, 07 Jun 2010 07:30:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>jQuery Plugin : ClockPick 選取時間</title>
		<link>http://blog.hsin.tw/2009/jquery-plugin-clockpick/</link>
		<comments>http://blog.hsin.tw/2009/jquery-plugin-clockpick/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 06:14:14 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=368</guid>
		<description><![CDATA[網路上可以找到很多月曆的js程式 但是選取時間的程式相對少很多 前陣子找到了這個基於jquery的選取時間程式ClockPick 使用的方法很直覺 也有數個參數可以設定以達到自己的需求 demo就直接去該網頁看囉 範例下載]]></description>
			<content:encoded><![CDATA[<p>網路上可以找到很多月曆的js程式<span id="more-368"></span><br />
但是選取時間的程式相對少很多<br />
前陣子找到了這個基於jquery的選取時間程式<a target="_blank" href="http://www.jnathanson.com/index.cfm?page=jquery/clockpick/ClockPick">ClockPick</a><br />
使用的方法很直覺<br />
也有數個參數可以設定以達到自己的需求<br />
demo就直接去該網頁看囉</p>
<p><a href="http://ex.hsin.tw/files/clockpick.zip">範例下載</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-plugin-clockpick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery in Action</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 11:54:43 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=337</guid>
		<description><![CDATA[這些只是我大概記一下的內容 要詳細閱讀跟學習jQuery還是買本書比較實在喔~ 原文書網址：jQuery in Action 中文版：jQuery實戰手冊 原文電子書版本：咕狗"jquery in action ebook" http://jquery.com/ 這本書是以jQuery 1.2.1版為基礎 ch.1 Introuducing jQuery&#160; jQuery概略介紹 ch.2 Creating the wrapped element set&#160; 建立elements set ch.3 Bringing pages to life with jQuery&#160; 讓頁面上的東西更生動 ch.4 Events are where it happens!&#160; events的操作 ch.5 Sprucing up with animations and effects&#160; 動畫及效果 ch.6 jQuery utility functions&#160; 通用函式 ch.7 Extending [...]]]></description>
			<content:encoded><![CDATA[<p>這些只是我大概記一下的內容<br />
<span id="more-337"></span><br />
要詳細閱讀跟學習jQuery還是買本書比較實在喔~<br />
原文書網址：<a href="http://www.manning.com/bibeault/" target="_blank">jQuery in Action</a><br />
中文版：<a href="http://findbook.tw/book/9789861816388/basic" target="_blank">jQuery實戰手冊</a><br />
原文電子書版本：<a href="http://tinyurl.com/d3tbsq" target="_blank">咕狗"jquery in action ebook"</a></p>
<p><a href="http://jquery.com/" target="_blank">http://jquery.com/</a><br />
這本書是以jQuery 1.2.1版為基礎</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch1-introuducing-jquery/">ch.1 Introuducing jQuery</a>&nbsp;<br />
jQuery概略介紹</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch2-creating-the-wrapped-element-set/">ch.2 Creating the wrapped element set</a>&nbsp;<br />
建立elements set</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch3/">ch.3 Bringing pages to life with jQuery</a>&nbsp;<br />
讓頁面上的東西更生動</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch4/">ch.4 Events are where it happens!</a>&nbsp;<br />
events的操作</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch5/">ch.5 Sprucing up with animations and effects</a>&nbsp;<br />
動畫及效果</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch-6/">ch.6 jQuery utility functions</a>&nbsp;<br />
通用函式</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch-7/">ch.7 Extending jQuery with custom plugins</a>&nbsp;<br />
自訂擴充plugin</p>
<p><a style="font-weight:bold;" target="_blank" href="http://blog.hsin.tw/2009/jquery-in-action-ch8/">ch.8 Talk to the server with Ajax</a>&nbsp;<br />
ajax介紹</p>
<p><b>ch.9 Prominent, powerful,and practical plugins</b><br />
plugin介紹<br />
<a href="http://docs.jquery.com/Plugins" target="_blank">http://docs.jquery.com/Plugins</a>&nbsp;<br />
<a href="http://jquery.com/plugins/most_popular" target="_blank">http://jquery.com/plugins/most_popular</a>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.8 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch8/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch8/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 12:05:45 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=323</guid>
		<description><![CDATA[ch.8 Talk to the server with Ajax .method{background-color:#ffffcc;color:#000000;margin:10px;width:250px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 8.1 Brushing up on Ajax 簡單地說明了ajax運作的過程 8.2 Loading content into elements 8.2.1 Loading content with jQuery 首先先介紹jQuery中ajax最簡單的一個command load(url,parameters,callback) url是要求的網址 parameters是以object形式帶入的參數 如果有值是使用POST method，省略的話則是使用GET method callback是當load好的值已經被放入elements後執行的function 這個function有三個參數 response text、the status code跟the XHR instance $('.injectMe').load('/someResource #div'); 這個例子會讀取/someResource頁面的東西 並將內容填入所有class=injectMe的elements中 有一點可以提的是 在url這個參數中 如果只是要取得該頁面上部份的內容時 可以在後面加上selector 像這個例子就是取得/someResource中&#60;div>裡的內容 serialize() 而如果要使用表單中的值帶入參數 可以利用serialize()來將要傳送的值轉成query string &#60;form [...]]]></description>
			<content:encoded><![CDATA[<p>ch.8 Talk to the server with Ajax<br />
<span id="more-323"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:250px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<div class="title">8.1 Brushing up on Ajax</div>
<p><!--div class="subtitle">8.1.1 Creating an XHR instance</div>
<div class="subtitle">8.1.2 Initiating the request</div>
<div class="subtitle">8.1.3 Keeping track of progress</div>
<div class="subtitle">8.1.4 Getting the response</div-->
簡單地說明了ajax運作的過程</p>
<div class="title">8.2 Loading content into elements</div>
<div class="subtitle">8.2.1 Loading content with jQuery</div>
<p>首先先介紹jQuery中ajax最簡單的一個command</p>
<div class="method">load(url,parameters,callback)</div>
<p>url是要求的網址<br />
parameters是以object形式帶入的參數<br />
如果有值是使用POST method，省略的話則是使用GET method<br />
callback是當load好的值已經被放入elements後執行的function<br />
這個function有三個參數 response text、the status code跟the XHR instance</p>
<pre class="brush: jscript;">
$('.injectMe').load('/someResource #div');
</pre>
<p>這個例子會讀取/someResource頁面的東西<br />
並將內容填入所有class=injectMe的elements中<br />
有一點可以提的是 在url這個參數中 如果只是要取得該頁面上部份的內容時<br />
可以在後面加上selector<br />
像這個例子就是取得/someResource中&lt;div>裡的內容</p>
<div class="method">serialize()</div>
<p>而如果要使用表單中的值帶入參數<br />
可以利用serialize()來將要傳送的值轉成query string</p>
<pre class="brush: xml;">
&lt;form id=&quot;form1&quot; name=&quot;form1&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;myname&quot; value=&quot;joe&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;age&quot; value=&quot;18&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;city&quot; value=&quot;taipei&quot;&gt;
&lt;/form&gt;
</pre>
<pre class="brush: jscript;">
var str = $(&quot;#form1&quot;).serialize();
//str會轉成這樣
// myname=joe&amp;age=18&amp;city=taipei
</pre>
<div class="method">serializeArray()</div>
<p>而serializeArray()則是會返回一個object</p>
<pre class="brush: jscript;">
var myobj = $(&quot;#form1&quot;).serializeArray();
</pre>
<p>myobj會轉成這樣<br />
[{name: 'myname', value:'joe'},{name: 'age', value:'18'},{name: 'city', value:'taipei'}]</p>
<div class="subtitle">8.2.2 Loading dynamic inventory data</div>
<p>舉一個賣鞋的頁面來練習load()</p>
<div class="title">8.3 Making GET and POST requests</div>
<div class="subtitle">8.3.1 Getting data with jQuery</div>
<div class="method">$.get(url,parameters,callback)</div>
<p>以get method連線</p>
<pre class="brush: jscript;">
$.get(
	'getmydata.php',
	{a:1, b:2, c:3},
	function(data){alert(data);}
);
</pre>
<p>url是要求的網址<br />
parameters是參數(Object或是字串)<br />
callback是返回的function 這個function可以有兩個參數 第一個是返回的內容 第二個是status</p>
<div class="subtitle">8.3.2 Getting JSON data</div>
<div class="method">$.getJSON(url,parameters,callback)</div>
<p>url是要求的網址<br />
parameters是參數(Object或是字串)<br />
callback是返回的function 這個function可以有兩個參數 第一個是返回的內容 第二個是status<br />
與$.get()相同 但是是返回JSON形式的值</p>
<div class="subtitle">8.3.3 Making POST requests</div>
<div class="method">$.post(url,parameters,callback)</div>
<p>以post method連線<br />
url是要求的網址<br />
parameters是參數(Object或是字串)<br />
callback是返回的function 這個function可以有兩個參數 第一個是返回的內容 第二個是status</p>
<div class="title">8.4 Taking full control of an Ajax request</div>
<p>前一節介紹的是簡易的ajax連線方式<br />
這節則是會介紹比較詳細 可以設定較多細節的方式</p>
<div class="subtitle">8.4.1 Making Ajax requests with all the trimmings</div>
<div class="method">$.ajax(options)</div>
<p>可以帶的參數很多<br />
這裡舉較常使用的三個<br />
其他的可以到<a href="http://docs.jquery.com/Ajax/jQuery.ajax#toptions" target="_blank">docs</a>看</p>
<pre class="brush: jscript;">
$.ajax({
  url: &quot;test.js&quot;,
  type: &quot;GET&quot;,
  dataType: &quot;script&quot;
});
</pre>
<p>url是要求的網址<br />
type是POST或是GET<br />
dataType是返回值的形式 可以填入的有xml、xml、xml、json、jsonp、text</p>
<div class="subtitle">8.4.2 Setting request defaults</div>
<div class="method">$.ajaxSetup(properties)</div>
<p>$.ajaxSetup()設定同一個頁面中$.ajax()可以共用的參數<br />
可以帶入的參數也就是前一小節(8.4.1)所說的參數<br />
這個不會影響到load()<br />
而設定type時也不會影響到$.get()跟$.post()</p>
<div class="subtitle">8.4.3 Global functions</div>
<p>除了可以用$.ajaxSetup()預設參數外<br />
還有在ajax連線中的不同階段可以使用的function<br />
ajaxStart()、ajaxSend()、ajaxSuccess()、ajaxError()、ajaxComplete()、ajaxStop()<br />
可以到<a href="http://docs.jquery.com/Ajax" target="_blank">docs</a>看</p>
<div class="title">8.5 Putting it all together</div>
<p>是一個綜合練習的例子</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.7 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch-7/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch-7/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 12:03:52 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[瀏覽器]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=316</guid>
		<description><![CDATA[ch.7 Extending jQuery with custom plugins .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 7.1 Why extend? 使用自訂擴充的plugin可以讓程式及設計有一致性 而且建立重複使用的設計有很多優點 繼承進而擴充了jQuery裡原本就存在的功能更是可以讓事情變得更簡單 7.2 The jQuery plugin authoring guidelines 要建立自訂擴充的plugin需要一定的規範及規則 以確保可以與其他plugin甚至是其他js lib正常地運作 Extending jQuery包含了像是Utility functions或是Methods兩種形式 7.2.1 Naming files and functions 為了避免plugin的檔名與原本已經在使用或是其他人建立的檔名重複 這邊提了三點建議 1.以jquery為開頭(可以避免與不是以jQuery為基礎的其他js檔重複) 2.接著可以寫這個plugin的名字 3.最後以.js結尾 以書中的例子來說 如果要寫一個名為Fred的plugin 其檔名可以命名為jquery.fred.js 另一個有用的方法 可以上jQuery收集plugin的地方找找看 如果看到相同的名字就可以避免重複囉 同樣的避免function名字與別人重複到 也是一樣的方法 7.2.2 Beware the $ jQuery('#myitem').show(); 如果是自己在寫jQuery的script時 常常會使用$來代替jQuery的寫法 但是在寫plugin時 則是可以使用jQuery來寫 以避免不確定性(例如同頁面有使用prototype.js)囉 [...]]]></description>
			<content:encoded><![CDATA[<p>ch.7 Extending jQuery with custom plugins<br />
<span id="more-316"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<div class="title">7.1 Why extend?</div>
<p>使用自訂擴充的plugin可以讓程式及設計有一致性<br />
而且建立重複使用的設計有很多優點<br />
繼承進而擴充了jQuery裡原本就存在的功能更是可以讓事情變得更簡單</p>
<div class="title">7.2 The jQuery plugin authoring guidelines</div>
<p>要建立自訂擴充的plugin需要一定的規範及規則<br />
以確保可以與其他plugin甚至是其他js lib正常地運作<br />
Extending jQuery包含了像是Utility functions或是Methods兩種形式</p>
<div class="subtitle">7.2.1 Naming files and functions</div>
<p>為了避免plugin的檔名與原本已經在使用或是其他人建立的檔名重複<br />
這邊提了三點建議<br />
1.以jquery為開頭(可以避免與不是以jQuery為基礎的其他js檔重複)<br />
2.接著可以寫這個plugin的名字<br />
3.最後以.js結尾<br />
以書中的例子來說<br />
如果要寫一個名為Fred的plugin<br />
其檔名可以命名為<b>jquery.fred.js</b></p>
<p>另一個有用的方法 可以上<a href="http://docs.jquery.com/Plugins">jQuery收集plugin的地方</a>找找看<br />
如果看到相同的名字就可以避免重複囉</p>
<p>同樣的避免function名字與別人重複到<br />
也是一樣的方法</p>
<div class="subtitle">7.2.2 Beware the $</div>
<pre class="brush: jscript;">
jQuery('#myitem').show();
</pre>
<p>如果是自己在寫jQuery的script時<br />
常常會使用$來代替jQuery的寫法<br />
但是在寫plugin時<br />
則是可以使用jQuery來寫<br />
以避免不確定性(例如同頁面有使用prototype.js)囉<br />
或是如前一章6.2所提的</p>
<pre class="brush: jscript;">
(function($){
//
// 在這裡使用$
//
})(jQuery);
</pre>
<p>寫在這裡面時就可以用$囉</p>
<div class="subtitle">7.2.3 Taming complex parameter lists</div>
<p>在使用plugin時可能會需要傳入不同的參數來運用<br />
但是有時只需要用預設值就好了</p>
<pre class="brush: jscript;">
//例如有一個function有7個參數
function complex(p1,p2,p3,p4,p5,p6,p7) {/* ... */}
//
//但有時只需要填入p1或是p7的值來使用
complex(valueA,null,null,null,null,null,valueB);
//
//甚或是這樣
complex(valueA,null,valueC,valueD,null,null,valueB);
</pre>
<p>這樣會造成傳入及讀取參數的複雜度<br />
所以可以使用下面的方法來取代</p>
<pre class="brush: jscript;">
complex(valueA, {
  p3: valueC,
  p4: valueD,
  p7: valueB
});
</pre>
<p>將一定要傳入的參數如同之前一樣的設定置放<br />
而把其他有時候可以省略的參數合併放在一個object中<br />
這樣便不用在意是第幾個參數省略<br />
或是傳入了多少個參數了</p>
<p>在plugin裡要使用參數的時候<br />
可以利用6.3.6講到的$.extend()</p>
<pre class="brush: jscript;">
function complex(p1,options){
  var settings = $.extend({
    option1: defaultValue1,
    option2: defaultValue2,
    option3: defaultValue3,
    option4: defaultValue4,
    option5: defaultValue5,
    option6: defaultValue6
  },options||{});
  //其他script
}
</pre>
<p>因為$.extend()裡排在後面的object會把前面的object中有相同的property值蓋過去<br />
所以如果有填入參數 就會使用填入的參數<br />
不然就是使用預設的參數<br />
而有一點要注意的是<b>||{}</b>這個地方<br />
當完全沒有填入參數時<br />
就都使用plugin中的預設值</p>
<div class="title">7.3 Writing custom utility functions</div>
<pre class="brush: jscript;">
(function($){
//
// 在這裡使用$
//
})(jQuery);
</pre>
<p>就如同7.2.2講的<br />
如果在plugin中有大量使用到jQuery自己本身的method<br />
可以使用上面這樣的方法<br />
就可以在裡面使用$ 而不受到干擾</p>
<div class="subtitle">7.3.1 Creating a data manipulation utility function</div>
<div class="subtitle">7.3.2 Writing a date formatter</div>
<p>這兩小節各別有一個Utility functions類型的自訂擴充練習</p>
<div class="title">7.4 Adding new wrapper methods</div>
<p>要建立wrapper methods是使用<b>$.fn</b><br />
下面是一個簡單的例子</p>
<pre class="brush: jscript;">
(function($){
  $.fn.makeItBlue = function() {
    return this.css('color','blue');
  }
})(jQuery);
</pre>
<p>通常來說 除非是特殊需要<br />
否則return的值仍是該wrapped set<br />
這樣才能繼續在chain中使用這組elements</p>
<div class="subtitle">7.4.1 Applying multiple operations in a wrapper method</div>
<div class="subtitle">7.4.2 Retaining state within a wrapper method</div>
<p>這兩小節各別有一個wrapper method類型的自訂擴充練習</p>
<pre class="brush: jscript;">
(function($){
  //將settings定義在這裡 才能讓其他的methods(如下面的showPhoto)使用到
  var settings;
  //主要的plugin
  $.fn.photomatic = function(callerSettings) {
    //如同7.2.3所講的參數用法一樣
    settings = $.extend({
      photoElement: '#photomaticPhoto',
      lastControl: null
    }, callerSettings || {});
    //plugin所執行的功能
    settings.thumbnails = this.filter('img');
    settings.thumbnails.click(function(){ showPhoto(this.index); });
    //如果有需要 可以給一個初始值
    showPhoto(0);
    //返回同樣的wrapped set
    return this;
  };
  //將重複性的功能另外寫一個method
  var showPhoto = function(index) {
    settings.photoElement
      .attr('src',settings.transformer(settings.thumbnails[index].src));
    settings.current = index;
  };
})(jQuery);
</pre>
<p>在7.4.2中 講解的例子架構大概是上面這樣(有刪掉部份的東西)</p>
<p><!--<br />
-本章小節-<br />
自己寫plugin我還沒嘗試過<br />
下次來踹踹<br />
(有結跟沒結一樣...)<br />
--></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.6 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch-6/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch-6/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 12:11:36 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[瀏覽器]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=304</guid>
		<description><![CDATA[ch.6 jQuery utility functions .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 這章會介紹除了操作elements外的utility functions 6.1 Using the jQuery flags 這節要介紹三個jQuery flags $.browser $.boxModel $.styleFloat 6.1.1 Detecting the user agent (jQuery1.3已經不建議使用$.browser，而有新增一個新的物件$.support) 檢測使用者所用的瀏覽器 一開始是先介紹使用判斷method的方法 if (element.attachEvent) { element.attachEvent('onclick',someHandler); } else if (element.addEventListener) { element.addEventListener('click',someHandler); } else { throw new Error('event handling not supported'); } 而這個可能發生的問題是 method可以使用 但是裡面帶的參數因為不同的瀏覽器而有不同的意義 所以jQuery提供了一個辨識瀏覽器的方法 $.browser if($.browser.msie){ alert('這是IE瀏覽器'); } [...]]]></description>
			<content:encoded><![CDATA[<p>ch.6 jQuery utility functions<br />
<span id="more-304"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<p>這章會介紹除了操作elements外的utility functions</p>
<div class="title">6.1 Using the jQuery flags</div>
<p>這節要介紹三個jQuery flags<br />
$.browser<br />
$.boxModel<br />
$.styleFloat</p>
<div class="subtitle">6.1.1 Detecting the user agent</div>
<div style="color:#cc0000;">(jQuery1.3已經不建議使用$.browser，而有新增一個新的物件<a href="http://docs.jquery.com/Utilities/jQuery.support" target="_blank">$.support</a>)</div>
<p>檢測使用者所用的瀏覽器<br />
一開始是先介紹使用判斷method的方法</p>
<pre class="brush: jscript;">
if (element.attachEvent) {
  element.attachEvent('onclick',someHandler);
}
else if (element.addEventListener) {
  element.addEventListener('click',someHandler);
}
else {
  throw new Error('event handling not supported');
}
</pre>
<p>而這個可能發生的問題是 method可以使用<br />
但是裡面帶的參數因為不同的瀏覽器而有不同的意義<br />
所以jQuery提供了一個辨識瀏覽器的方法</p>
<div class="method">$.browser</div>
<pre class="brush: jscript;">
if($.browser.msie){
	alert('這是IE瀏覽器');
}
</pre>
<p>會有下面幾個值<br />
$.browser.msie<br />
$.browser.mozilla<br />
$.browser.safari<br />
$.browser.opera<br />
$.browser.version<br />
前面四個返回的是boolean值<br />
是將瀏覽器歸類到四大類<br />
如果為該類即返回true<br />
其餘會是false<br />
而有些瀏覽器因為版本不同 也可能會有差異 所以$.browser.version是使用的版本</p>
<p>建議是method方法也無法判別了才使用$.browser</p>
<div class="subtitle">6.1.2 Determining the box model</div>
<div style="color:#cc0000;">(jQuery1.3已經不建議使用$.boxModel，而有新增一個新的物件<a href="http://docs.jquery.com/Utilities/jQuery.support" target="_blank">$.support</a>)</div>
<div class="method">$.boxModel</div>
<p>$.boxModel返回一個boolean值<br />
當是使用W3C standard box model時返回true<br />
而使用IE box model(或是說traditional box model)時返回false<br />
這個需要用到的時機<br />
書中提到的是關於width跟height的解釋<br />
使用W3C standard box model時<br />
計算width跟height不會包含padding跟border的pixels<br />
而IE box model則會包含<br />
所以可能會造成elements的大小在不同瀏覽器看起來會不太一樣</p>
<div class="subtitle">6.1.3 Detecting the correct float style to use</div>
<div class="method">$.styleFloat</div>
<p>在不同的瀏覽器對於float有不同的名字<br />
在IE是styleFloat 其他的則是cssFloat<br />
所以使用$.styleFloat就不用擔心這個問題了</p>
<pre class="brush: jscript;">
element.style[$.styleFloat] = 'left';
</pre>
<p>不過通常使用css(&#8216;float&#8217;)就可以了<br />
$.styleFloat主要是給plugins或是extensions製作的人使用</p>
<div class="title">6.2 Using other libraries with jQuery</div>
<div class="method">$.noConflict()</div>
<p>在Ch1有稍微提到<br />
如果在同個頁面上要使用其他的javascript library<br />
可以使用$.noConflict()來避免衝突</p>
<pre class="brush: jscript;">
var $j = jQuery.noConflict();
</pre>
<p>這樣就可以使用$j來代替jQuery或是$了</p>
<p>或是可以使用下面這樣</p>
<pre class="brush: jscript;">
//要注意有帶參數$喔
(function($) { /* function body here */ })(jQuery);
//或是下面這個ready function
jQuery(function($){alert('$ = '+ $);});
</pre>
<p>在裡面就還是可以使用$來操作囉</p>
<div class="title">6.3 Manipulating JavaScript objects and collections</div>
<div class="subtitle">6.3.1 Trimming strings</div>
<div class="method">$.trim(value)</div>
<pre class="brush: jscript;">
$('#someField').val($.trim($('#someField').val()));
</pre>
<p>就像PHP中trim()的函式<br />
將字串前後的空白都消除掉<br />
在表單驗證中很常用到</p>
<div class="subtitle">6.3.2 Iterating through properties and collections</div>
<div class="method">$.each(container,callback)</div>
<p>對一個array或object中的值依序作處理</p>
<pre class="brush: jscript;">
var anArray = ['one','two','three'];
$.each(anArray,function(n,value) {
  //do something here
});
var anObject = {one:1, two:2, three:3};
$.each(anObject,function(name,value) {
  //do something here
});
</pre>
<p>container是要處理的array或是object<br />
callback是作處理的function<br />
這個function會有兩個參數 第一個是index 第二個是value</p>
<div class="subtitle">6.3.3 Filtering arrays</div>
<div class="method">$.grep(array,callback,invert)</div>
<p>以某個條件過濾一個array以生成另一個新的array </p>
<pre class="brush: jscript;">
var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];
var newarr = $.grep(arr, function(n, i){
					      return (n &gt; 5);
					    });
//新生成的newarr會是 [9, 8, 6, 9, 7, 8, 6, 9]
</pre>
<p>第一個參數array很明顯的就是要處理的array<br />
第二個參數callback是作處理的function 會有兩個參數 第一個是value 第二個是index<br />
第三個參數invert是個boolean值<br />
如果省略invert或是填寫false時 當callback返回值為true的話 就會將這個值放進新生成的array中<br />
如果invert填入true 則當callback返回值為false才會將這個值放進新生成的array中</p>
<pre class="brush: jscript;">
var bigNumbers = $.grep(originalArray,'a&gt;100');
//這時jQuery會自己建立一個function
function(a,i){return a&gt;100;}
//而a就是value ,i就是index
</pre>
<p>如上所示 callback也可以簡寫為一個string</p>
<div class="subtitle">6.3.4 Translating arrays</div>
<div class="method">$.map(array,callback)</div>
<p>對一個array作處理並生成為一個新array<br />
第一個參數array是要處理的array<br />
第二個參數callback是作處理的function 會有兩個參數 第一個是value 第二個是index</p>
<pre class="brush: jscript;">
//將array中的每個值都+1
var oneBased = $.map([0,1,2,3,4],function(value){return value+1;});
//callback如同$.grep()一樣 也是可以寫成一個string
var oneBased = $.map([0,1,2,3,4],'a+1');
</pre>
<p>而有一點要注意的是<br />
如果callback返回值為null或是undefined<br />
則這個值就不會被放進新array中<br />
所以新的array元素個數是有可能比原本的array少</p>
<pre class="brush: jscript;">
var characters = $.map(
  ['that','other thing'],
  function(value){return value.split('');}
);
//characters會是['t','h','a','t','o','t','h','e','r',' ','t','h','i','n','g']
</pre>
<p>如上所示 另一個可以提的是<br />
如果callback處理值完之後 回傳的是一個array<br />
則會將這些所有回傳的array都和在同一個新的array中</p>
<div class="subtitle">6.3.5 More fun with JavaScript arrays</div>
<div class="method">$.inArray(value,array)</div>
<p>判斷一個array中有沒有某個值</p>
<pre class="brush: jscript;">
var index = $.inArray(2,[1,2,3,4,5]);
//會返回1
</pre>
<p>第一個參數value是要判斷的值<br />
當第二個參數array中遇到第一個值為value的時候 會返回其index<br />
找不到的時候則會返回-1</p>
<div class="method">$.makeArray(object)</div>
<pre class="brush: jscript;">
var images = document.getElementsByTagName(&quot;img&quot;);
//這樣是一個NodeList
</pre>
<p>將一個array-like object(像是一個NodeList)轉換成array</p>
<div class="method">$.unique(array)</div>
<p>將array中相同的值剔除掉</p>
<div class="subtitle">6.3.6 Extending objects</div>
<div class="method">$.extend(target,source1,source2, &#8230; sourceN)</div>
<p>將數個object合併<br />
下面是一個簡單的例子</p>
<pre class="brush: jscript;">
var target =  { a: 1, b: 2, c: 3 };
var source1 = { c: 4, d: 5, e: 6 };
var source2 = { e: 7, f: 8, g: 9 };
$.extend(target,source1,source2);
</pre>
<p>如果沒有返回給一個新的object<br />
則是會合併在第一個參數target<br />
而這個例子中 target會變為{a: 1, b: 2, c: 4, d: 5, e: 7, f: 8, g: 9}<br />
有一點要注意的是<br />
如果objects中有相同的property 則後面的object的會蓋過前面的<br />
(這個例子就是source1的c:4會蓋過target的c:4，source2的e:7會蓋過source1的e:6)</p>
<div class="title">6.4 Dynamically loading scripts</div>
<div class="method">$.getScript(url,callback)</div>
<p>依據條件或是情況下再讀取其他的外部script 而不是在頁面load時就讀取script<br />
第一個參數url是要讀取的script的路徑<br />
第二個參數是讀取script完成後會執行的function</p>
<p><!--[本章小結]<br />
我以前比較少用到utility functions的東西<br />
所以這章講的東西大多都是第一次見到<br />
有些東西看起來<br />
用了應該是可以省很多力氣的~<br />
但是還是要多想多練習才知道哪裡需要用或是用得到--></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.5 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch5/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch5/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 11:50:49 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=297</guid>
		<description><![CDATA[ch.5 Sprucing up with animations and effects .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 5.1 Showing and hiding elements 要簡單地顯示或隱藏elements 是使用show()以及hide()這兩個方法 $(&#34;#myimg&#34;).hide(); $(&#34;#myimg&#34;).show(); 這裡還有提到一點就是 如果頁面上某個element要預設成隱藏 書裡推薦的是在頁面load完後再使用hide()將他隱藏 會比直接在style裡加display:none;好 5.1.1 Implementing a collapsible list 這個小節利用一個巢狀列表 以顯示或是隱藏裡面的資訊來練習show()及hide() 5.1.2 Toggling the display state of elements 還有一個可以切換顯示或是隱藏elements的方法 toggle() $(&#34;#myimg&#34;).toggle(); 當elements是隱藏的時候 使用toggle()會將他顯示 相反也是一樣 5.2 Animating the display state of elements 這節是要介紹比較不突兀的顯示或隱藏elements的方法 利用一些effect來讓這個動作比較平滑 5.2.1 Showing and [...]]]></description>
			<content:encoded><![CDATA[<p>ch.5 Sprucing up with animations and effects<br />
<span id="more-297"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<div class="title">5.1 Showing and hiding elements</div>
<p>要簡單地顯示或隱藏elements 是使用<b>show()</b>以及<b>hide()</b>這兩個方法</p>
<pre class="brush: jscript;">
$(&quot;#myimg&quot;).hide();
$(&quot;#myimg&quot;).show();
</pre>
<p>這裡還有提到一點就是<br />
如果頁面上某個element要預設成隱藏<br />
書裡推薦的是在頁面load完後再使用hide()將他隱藏<br />
會比直接在style裡加display:none;好</p>
<div class="subtitle">5.1.1 Implementing a collapsible list</div>
<p>這個小節利用一個巢狀列表 以顯示或是隱藏裡面的資訊來練習show()及hide()</p>
<div class="subtitle">5.1.2 Toggling the display state of elements</div>
<p>還有一個可以切換顯示或是隱藏elements的方法 <b>toggle()</b></p>
<pre class="brush: jscript;">
$(&quot;#myimg&quot;).toggle();
</pre>
<p>當elements是隱藏的時候 使用toggle()會將他顯示 相反也是一樣</p>
<div class="title">5.2 Animating the display state of elements</div>
<p>這節是要介紹比較不突兀的顯示或隱藏elements的方法<br />
利用一些effect來讓這個動作比較平滑</p>
<div class="subtitle">5.2.1 Showing and hiding elements gradually</div>
<div class="method">hide(speed,callback)</div>
<pre class="brush: jscript;">
$(&quot;#myimg&quot;).show('fast');
$(&quot;#myimg&quot;).hide(2000);
</pre>
<p>第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast)<br />
如果省略的話 則是會像上節講的一樣直接隱藏<br />
第二個參數callback是擺一個function 當這個動作完成時會執行</p>
<div class="method">show(speed,callback)</div>
<div class="method">toggle(speed,callback)</div>
<p>同樣的 show()跟toggle()的用法也是一樣<br />
第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast)<br />
第二個參數callback是擺一個function 當這個動作完成時會執行</p>
<div class="subtitle">5.2.2 Fading elements into and out of existence</div>
<p>另一種顯示或隱藏的方法是改變elements的透明度直到完全透明或是完全顯示<br />
<b>fadeIn()</b>跟<b>fadeOut()</b></p>
<div class="method">fadeOut(speed,callback)</div>
<div class="method">fadeIn(speed,callback)</div>
<pre class="brush: jscript;">
$(&quot;#myimg&quot;).fadeOut('fast');
</pre>
<p>(與show()、hide()、toggle()的參數用法一樣)<br />
第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast) 沒填入的話預設是normal<br />
第二個參數callback是擺一個function 當這個動作完成時會執行</p>
<p>另一個方法<b>fadeTo()</b>則是可以調整elements的透明度</p>
<div class="method">fadeTo(speed,opacity,callback)</div>
<pre class="brush: jscript;">
$(&quot;#myimg&quot;).fadeTo('fast',0.5);
</pre>
<p>第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast) 沒填入的話預設是normal<br />
第二個參數opacity是透明度 他的範圍可以填入0.0 ~ 1.0<br />
第三個參數callback是擺一個function 當這個動作完成時會執行</p>
<div class="subtitle">5.2.3 Sliding elements up and down</div>
<p>還有另一種顯示或隱藏的方法是將elements慢慢向上收回或是慢慢向下展開<br />
<b>slideDown()</b>跟<b>slideUp()</b>及切換的<b>slideToggle()</b></p>
<div class="method">slideDown(speed,callback)</div>
<div class="method">slideUp(speed,callback)</div>
<div class="method">slideToggle(speed,callback)</div>
<pre class="brush: jscript;">
$(&quot;#myimg&quot;).slideDown(1000);
$(&quot;#myimg&quot;).slideToggle('slow');
</pre>
<p>(與show()、hide()、toggle()的參數用法一樣)<br />
第一個參數speed可以填入數字(以毫秒為單位)或是字串(slow、normal、fast) 沒填入的話預設是normal<br />
第二個參數callback是擺一個function 當這個動作完成時會執行</p>
<div class="subtitle">5.2.4 Stopping animations</div>
<div class="method">stop()</div>
<p>當要停止某個elements的動作時 要使用stop()</p>
<div class="title">5.3 Creating custom animations</div>
<p>jQuery提供了一個方法<b>animate()</b> 可以讓我們自己設計想要elements作的動作</p>
<div class="method" style="width:300px;">animate(properties,duration,easing,callback)</div>
<div class="method">animate(properties,options)</div>
<pre class="brush: jscript;">
$('#animateMe').animate(
	{opacity:0,top:0}
  ,'slow'
  ,function(){ $(this).hide(); }
);
</pre>
<p>properties是填入一個object 而這個object要包含所有最後要達到css stlye<br />
(例如elements的寬度要達到600px 之類的)<br />
duration可以填入數字(以毫秒為單位)或是字串(slow、normal、fast) 沒填入的話預設是normal<br />
easing是漸變的方式 有兩種內建的方式linear(線性)、swing(搖擺)<br />
callback是擺一個function 當這個動作完成時會執行<br />
options是填入一個object 而這個object則是可以填入上面講過的duration、easing跟complete(也就是上面說的callback)<br />
還有另一個可以填入的是queue 如果設定為false 則這個動作會立即被執行(也就是如果後面也跟著另一個animate() 這個動作會同時執行)<br />
<b>[update]</b><br />
如果要設定顏色的漸變 還要再裝<a href="http://plugins.jquery.com/project/color" target="_blank">plugin</a></p>
<div class="subtitle">5.3.1 A custom scale animation</div>
<p>先介紹一個改變尺寸的例子</p>
<pre class="brush: jscript;">
$('.animateMe').each(function(){
	$(this).animate(
		{
			width: $(this).width() * 2,
			height: $(this).height() * 2
		},
		2000
	);
});
</pre>
<p>將class=animateMe的elements在2秒(2000毫秒)的時間內將長寬都各別變大為兩倍</p>
<div class="subtitle">5.3.2 A custom drop animation</div>
<p>介紹一個drop的例子</p>
<pre class="brush: jscript;">
$('.animateMe').each(function(){
	$(this)
		.css('position','relative')
		.animate(
			{
				opacity: 0,
				top: $(window).height() - $(this).height() - $(this).position().top
			},
			'slow',
			function(){ $(this).hide(); });
});
</pre>
<p>要先將elements的position設定為relative(因為這樣才能動)<br />
改變class=animateMe的elements的透明度及高度<br />
最後會被移到畫面的底部 並且透明度會變0(也就是完全透明)<br />
然後再將elements隱藏起來</p>
<p>有一點可以提的是<br />
如果將opacity:0改成opacity:"hide"<br />
這個動作最後完成時會直接將elements隱藏<br />
同時也不需要最後的callback的function</p>
<div class="subtitle">5.3.3 A custom puff animation</div>
<p>一個擴散並消失的例子<br />
將前兩小節的功能結合在一起</p>
<pre class="brush: jscript;">
$('.animateMe').each(function(){
	var position = $(this).position();
	$(this)
		.css({position:'absolute',top:position.top,
					left:position.left})
		.animate(
			{
        opacity: 'hide',
        width: $(this).width() * 5,
        height: $(this).height() * 5,
        top: position.top - ($(this).height() * 5 / 2),
        left: position.left - ($(this).width() * 5 / 2)
      },
      'normal');
});
</pre>
<p>因為在擴散的過程中 elements的位置會向右下方長大<br />
所以同時也要改變位置 讓看起來的位置像沒有變一樣(真繞舌)<br />
首先要改變position為absolute 並給定目前的top跟left<br />
然後最終要到達的狀態是<br />
opacity就跟前一小節講的一樣 hide的意思就是最後會隱藏起來<br />
寬度跟高度則是變為原來的五倍<br />
top跟left則是要計算成會讓elements的中心點像是沒有變一樣(也就是向四方擴散)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.4 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch4/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch4/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 11:08:02 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=272</guid>
		<description><![CDATA[ch4 Events are where it happens! .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 4.1 Understanding the browser event models 4.1.1 The DOM Level 0 Event Model 4.1.2 The DOM Level 2 Event Model 4.1.3 The Internet Explorer Event Model 解釋了DOM中event操作的方式 以及IE自己獨到的model 那就是這樣了 繼續讀下去 絕對不是我翻不出來XD 4.2 The jQuery Event Model jQuery提供了統一的event操作方式 4.2.1 Binding event handlers using jQuery jQuery要對element綁定event是使用bind() $(&#34;img&#34;).bind('click',function(event){alert('Hi there!');}); [...]]]></description>
			<content:encoded><![CDATA[<p>ch4 Events are where it happens!<br />
<span id="more-272"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<div class="title">4.1 Understanding the browser event models</div>
<p>4.1.1 The DOM Level 0 Event Model<br />
4.1.2 The DOM Level 2 Event Model<br />
4.1.3 The Internet Explorer Event Model<br />
解釋了DOM中event操作的方式<br />
以及IE自己<del datetime="2009-06-10T09:08:13+00:00">獨到</del>的model<br />
那就是這樣了 繼續讀下去<br />
<del datetime="2009-06-10T09:08:13+00:00">絕對不是我翻不出來XD</del></p>
<div class="title">4.2 The jQuery Event Model</div>
<p>jQuery提供了統一的event操作方式</p>
<div class="subtitle">4.2.1 Binding event handlers using jQuery</div>
<p>jQuery要對element綁定event是使用bind()</p>
<pre class="brush: jscript;">
$(&quot;img&quot;).bind('click',function(event){alert('Hi there!');});
</pre>
<p>當按下&lt;img>時 會觸發參數中的函式</p>
<div class="method">bind(eventType,data,listener)</div>
<p>eventType是event的類型(click、focus這些)<br />
data是帶給listener的參數 可以省略<br />
listener是觸發後執行的函式 如果第二個參數data省略的話 這就會變成第二個參數</p>
<p>而對於常用的event jQuery也提供了各自的方法<br />
例如click event 如下</p>
<pre class="brush: jscript;">
$(&quot;img&quot;).click(function(){alert('Hi there!');});
</pre>
<p>按下圖片時會alert<br />
其他可以看<a href="http://docs.jquery.com/Events" target="_blank">官網</a></p>
<p>另一個跟bind()很像的是one()</p>
<div class="method">one(eventType,data,listener)</div>
<p>用法跟bind()一樣<br />
但是當這個函式被觸發一次之後 就會被自動地移除掉</p>
<div class="subtitle">4.2.2 Removing event handlers</div>
<p>而要移除的話是用unbind()</p>
<div class="method">unbind(eventType,listener)</div>
<p>如果兩個參數都省略的話 就是移除掉這個element所有的event<br />
有寫eventType的話 是看要移除哪個event<br />
listener則是移除掉bind()所建立的函式</p>
<div class="subtitle">4.2.3 Inspecting the Event instance</div>
<p>jQuery在event觸發後的函式中<br />
也有可以觀察頁面上的方法<br />
如要檢查有沒有按下ctrl鍵、alt鍵或是任何的數字字母鍵<br />
以及滑鼠目前的座標等等<br />
可是我找不到官網文件哪裡有寫 ._.</p>
<pre class="brush: jscript;">
$(&quot;img&quot;).keypress(function(e){alert(e.keyCode);});
</pre>
<p>判斷按下了哪個鍵(該鍵的keyCode)</p>
<div class="subtitle">4.2.4 Affecting the event propagation</div>
<p>event的stopPropagation()<br />
是阻止這個event往父節點的方向越往外觸發event<br />
preventDefault()<br />
則是停止這個event預設的任何動作<br />
(這兩個應該是這樣吧 總覺得好像解釋的不太對= =a js真是博大精深XD)</p>
<div class="subtitle">4.2.5 Triggering event handlers</div>
<div class="method">trigger(eventType)</div>
<p>觸發element的event</p>
<pre class="brush: jscript;">
$(&quot;form:first&quot;).trigger(&quot;submit&quot;);
</pre>
<p>像是可以submit而不用按按鍵</p>
<div class="method">eventName()</div>
<p>jQuery同樣的也提供了多個簡便的使用方法<br />
如click()、focus()、blur()<br />
可以像使用trigger()一樣的觸發特定的event</p>
<pre class="brush: jscript;">
$(&quot;input&quot;).click();
</pre>
<p>按下&lt;input>時會觸發click event(可以先用bind()綁定click event)</p>
<div class="subtitle">4.2.6 Other event-related commands</div>
<p>另外兩個跟操作event有關的method</p>
<div class="method">toggle(listenerOdd,listenerEven)</div>
<p>交互觸發不同的listener<br />
下面是一個簡單的例子 顯示或隱藏一個id=say的element</p>
<pre class="brush: jscript;">
$('#btn').toggle(
	function(event){
		$(&quot;#say&quot;).show();
	},
	function(event){
		$(&quot;#say&quot;).hide();
	}
);
</pre>
<p>按第一下會顯示 按第二下會隱藏 依序循環</p>
<div class="method">hover(overListener,outListener)</div>
<p>另一個常用的event是當滑鼠移入跟移出element時要觸發的event<br />
移入時是overListener<br />
移出時則是outListener</p>
<pre class="brush: jscript;">
$('#myimg').hover(reportover,reportout);
</pre>
<p>有一點要注意的是<br />
element裡面如果有child elements時 是不會造成移出的效果<br />
而是要移出該element才會有</p>
<div class="title">4.3 Putting events (and more) to work</div>
<p>這節是運用前面所學到的知識作一個綜合運用<br />
一個點菜菜單<br />
其中有一個用法可以看一下</p>
<pre class="brush: jscript;">
$(':checkbox').click(function(){
	$('div',$(this).parents('div:first'))
	.css('display','block');
});
</pre>
<p>這個element <b>$(&#8216;div&#8217;,$(this).parents(&#8216;div:first&#8217;))</b> 指的是<br />
往this的parents(也就是從父層開始往外推出去)找第一個遇到的div<br />
而這個找到的div中的div為返回的elements<br />
(很繞舌XD)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.3 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch3/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch3/#comments</comments>
		<pubDate>Tue, 26 May 2009 13:01:13 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=246</guid>
		<description><![CDATA[ch3 Bringing pages to life with jQuery .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:30px;} .subtitle{background-color:#eeeeee;color:#000000;margin-top:20px;} 3.1 Manipulating element properties and attributes &#60;img id=&#34;myImage&#34; src=&#34;image.gif&#34; alt=&#34;An image&#34; class=&#34;someClass&#34; title=&#34;This is an image&#34;/&#62; img是tag name 其他id、src、alt、class、title是attributes 而瀏覽器會將這些轉變成DOM中的element 而且會建立一個NodeList object並指派一組properties給這個element 這個element的attributes跟properties是可以動態變化的 而且通常也會保持一致 不過有時候也會不一樣 像是當給定src的attribute為image.gif 而property則會給完整的路徑 如http://localhost/image.gif attributes跟properties的名字大部分也是一樣的 少部份如attributes中的class 在properties中則是稱為className 3.1.1 Manipulating element properties each() 在each()中 會依序操作selectors所取得的elements，會由零開始(zero-based) 在裡面可以使用this這個property來表示這個element並操作 $('img').each(function(n){ this.alt='This is image['+n+'] with an [...]]]></description>
			<content:encoded><![CDATA[<p>ch3 Bringing pages to life with jQuery<br />
<span id="more-246"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:30px;}
.subtitle{background-color:#eeeeee;color:#000000;margin-top:20px;}
</style>
<div class="title">3.1 Manipulating element properties and attributes</div>
<pre class="brush: xml;">
&lt;img id=&quot;myImage&quot; src=&quot;image.gif&quot; alt=&quot;An image&quot; class=&quot;someClass&quot; title=&quot;This is an image&quot;/&gt;
</pre>
<p>img是tag name<br />
其他id、src、alt、class、title是attributes<br />
而瀏覽器會將這些轉變成DOM中的element<br />
而且會建立一個NodeList object並指派一組properties給這個element<br />
這個element的attributes跟properties是可以動態變化的<br />
而且通常也會保持一致<br />
不過有時候也會不一樣<br />
像是當給定src的attribute為image.gif<br />
而property則會給完整的路徑 如http://localhost/image.gif</p>
<p>attributes跟properties的名字大部分也是一樣的<br />
少部份如attributes中的class 在properties中則是稱為className</p>
<div class="subtitle">3.1.1 Manipulating element properties</div>
<div class="method">each()</div>
<p>在each()中 會依序操作selectors所取得的elements，會由零開始(zero-based)<br />
在裡面可以使用this這個property來表示這個element並操作</p>
<pre class="brush: jscript;">
$('img').each(function(n){
  this.alt='This is image['+n+'] with an id of '+this.id;
});
</pre>
<p>依序修改每個&lt;img>的alt值</p>
<p>而如果只是要取得其中一個的值 可以使用array的index方式取得(因為selectors所取得的elements也可以當作array來使用)</p>
<pre class="brush: jscript;">
var altValue = $('#myImage')[0].alt;
</pre>
<div class="subtitle">3.1.2 Fetching attribute values</div>
<div class="method">attr(name)</div>
<p>獲得element的屬性值</p>
<pre class="brush: xml;">
&lt;img id=&quot;myImage&quot; src=&quot;image.gif&quot; alt=&quot;An image&quot; class=&quot;someClass&quot; title=&quot;This is an image&quot; custom=&quot;some value&quot;/&gt;
</pre>
<p>這裡以這個img作為例子 可以看到他的屬性有一項為custom="some value"</p>
<pre class="brush: jscript;">
$(&quot;#myImage&quot;).attr(&quot;custom&quot;)
</pre>
<p>可以使用attr()來取得屬性的值(這裡會取得"some value")<br />
不過要注意的是 如果使用不是標準的屬性名稱(也就是這裡的custom) 可能會導致網頁無法正確解析或是無法取得該值</p>
<div class="subtitle">3.1.3 Setting attribute values</div>
<div class="method">attr(name,value)</div>
<p>設定element的屬性值</p>
<pre class="brush: jscript;">
$('*').attr('title',function(index) {
  return 'I am element ' + index + ' and my name is ' +
         (this.id ? this.id : 'unset');
});
</pre>
<p>除了可以在第二個參數直接填入要放的值<br />
也可以填入一個function 再將這個function的返回值填入</p>
<div class="method">attr(attributes)</div>
<p>attr()也可以一次設定多個屬性值</p>
<pre class="brush: jscript;">
$('input').attr(
  { value: 'v', title: 'Please enter a value' }
);
</pre>
<p>裡面放的是一個object<br />
這樣就可以一次設定element的value值跟title值了<br />
這邊要注意的是IE沒辦法改變&lt;input>的name值<br />
所以要在IE中改變的話 要直接建立一個新的&lt;input> 並取代原本的</p>
<div class="subtitle">3.1.4 Removing attributes</div>
<div class="method">removeAttr(name)</div>
<p>移除element的屬性<br />
使用的方式跟attr()一樣 不過這邊就是移除這個屬性<br />
要注意的是 這邊移除的是attribute 而property仍然會存在的(但是值可能會變)<br />
例如將readonly attribute移除<br />
那這個element的property可能會由true變為false 但是他仍然會存在</p>
<div class="subtitle">3.1.5 Fun with attributes</div>
<p>這小節舉了兩個運用attr()的例子</p>
<pre class="brush: jscript;">
$(&quot;a[href^=http://]&quot;).attr(&quot;target&quot;,&quot;_blank&quot;);
</pre>
<p>將頁面中所有的連結加上開啟在新頁面的功能</p>
<pre class="brush: jscript;">
$(&quot;form&quot;).submit(function() {
  $(&quot;:submit&quot;,this).attr(&quot;disabled&quot;, &quot;disabled&quot;);
});
</pre>
<p>對於頁面上所有表單的送出鍵 當他們被按下第一次之後 便變成disabled<br />
(也就是只能按一次送出)</p>
<div class="title">3.2 Changing element styling</div>
<p>要改變一個element的外觀(style)有兩個方式<br />
增加或拿掉css class<br />
或是直接更改這個element的style</p>
<div class="subtitle">3.2.1 Adding and removing class names</div>
<div class="method">addClass(names)</div>
<p>很容易可以瞭解這個method的用法<br />
就是對取得的elements加上一個class<br />
如果一次要加上多個 就以空格區隔開各class</p>
<div class="method">removeClass(names)</div>
<p>拿掉這個class<br />
如果一次要拿掉多個 就以空格區隔開各class</p>
<p>還有一個有用的method就是可以切換class</p>
<div class="method">toggleClass(names)</div>
<p>如果已經有這個class了 就拿掉這個class<br />
如果尚未有 則是加上這個class<br />
(在一組取得的elements裡 有可能有些element有這個class 有些沒有)</p>
<pre class="brush: jscript;">
function swap(){
  $('tr').toggleClass('striped');
}
</pre>
<p>這樣可以對table中單數雙數的tr給予不同的class 來達到明顯各row區隔的效果</p>
<div class="subtitle">3.2.2 Getting and setting styles</div>
<div class="method">css(name,value)</div>
<p>只改變一種(或是某幾種)style需要用到css()這個method<br />
例如將所有&lt;div>裡面的字都變成黑色</p>
<pre class="brush: jscript;">
$('div').css('color','#000000');
</pre>
<p>第二個參數除了可以擺string、number 也可以擺一個function<br />
例如將所有class=expandable的&lt;div>的寬度都再加20px</p>
<pre class="brush: jscript;">
$(&quot;div.expandable&quot;).css(&quot;width&quot;,function(){
   return $(this).width() + 20 + &quot;px&quot;;
});
</pre>
<p>就如同attr()一樣 css()也可以一次設定多個style</p>
<pre class="brush: jscript;">
$(&quot;p&quot;).css({color:&quot;#ff0011&quot;,&quot;background-color&quot;:&quot;blue&quot;});
</pre>
<p>name如果有 &#8211; 的話要加引號(ex: background-color)</p>
<p>如果要取得element的style值則是如下<br />
取得class=title的&lt;div>的寬度</p>
<pre class="brush: jscript;">
$(&quot;div.title&quot;).css(&quot;width&quot;);
</pre>
<p>這個返回值永遠是string型態<br />
所以如果是要其他如number型態的就還要再轉換</p>
<p>jQuery也提供了兩個方便的method</p>
<div class="method">width(value)</div>
<div class="method">height(value)</div>
<p>顧名思義 這就是設定element的寬度跟高度</p>
<pre class="brush: jscript;">
$(&quot;div.title&quot;).width(500);
$(&quot;div.title&quot;).css(&quot;width&quot;,&quot;500px&quot;);
</pre>
<p>這兩行的意義是一樣的</p>
<p>而沒加參數的則是取得寬度及高度</p>
<pre class="brush: jscript;">
$(&quot;div.title&quot;).width();
$(&quot;div.title&quot;).height();
</pre>
<div class="subtitle">3.2.3 More useful style-related commands</div>
<div class="method">hasClass(name)</div>
<p>另外還有一個method是可以取得elements是否有這個class<br />
如果有的話會返回true 反之則是false</p>
<pre class="brush: jscript;">
$(&quot;p:first&quot;).hasClass(&quot;surpriseMe&quot;);
</pre>
<p>其實就等同於ch2提到的is()的一個用法</p>
<pre class="brush: jscript;">
$(&quot;p:first&quot;).is(&quot;.surpriseMe&quot;);
</pre>
<p>不過就字面上來講 hasClass()可以較清楚的知道這個method的意義 </p>
<p>如果要取得elements的所有class 在書中有提供了一個寫法</p>
<pre class="brush: jscript;">
$.fn.getClassNames = function() {
  if (name = this.attr(&quot;className&quot;)) {
  	return name.split(&quot; &quot;);
  }
  else {
    return [];
  }
};
</pre>
<p>新增一個名叫getClassNames的method<br />
他會返回一個包含所有class的array<br />
如果沒有class的話 則是一個空的array</p>
<div class="title">3.3 Setting element content</div>
<div class="subtitle">3.3.1 Replacing HTML or text content</div>
<div class="method">html(text)</div>
<p>取得或是改變elements中的內容<br />
如果有參數的話就是改變內容<br />
沒有參數的話就是取得內容<br />
這個用法跟innerHTML是一樣的</p>
<div class="method">text(content)</div>
<p>另一個可以獲得內容的method是text()<br />
同樣的 有參數是改變內容 沒有的話則是取得內容<br />
而這個取得的內容會將tag都去掉<br />
下面是範例</p>
<pre class="brush: xml;">
&lt;ul id=&quot;theList&quot;&gt;
  &lt;li&gt;One&lt;/li&gt;
  &lt;li&gt;Two&lt;/li&gt;
  &lt;li&gt;Three&lt;/li&gt;
  &lt;li&gt;Four&lt;/li&gt;
&lt;/ul&gt;
</pre>
<pre class="brush: jscript;">
var text = $('#theList').text();
//這會取得將tag都去掉的字串：OneTwoThreeFour
</pre>
<p>如果是要改變內容<br />
會將新內容中的&lt;跟&gt;轉換成&amp;lt;跟&amp;gt;<br />
這樣就會將內容都顯示出來</p>
<div class="subtitle">3.3.2 Moving and copying elements</div>
<div class="method">append(content)</div>
<p>將字串、element或是object加到elements的後面(tag裡內容的後面 不是tag的後面)<br />
下面是個簡單的例子 將一段html碼加到每個&lt;p>內容的後面</p>
<pre class="brush: jscript;">
$('p').append('&lt;b&gt;some text&lt;b&gt;');
</pre>
<p>而將其他的element加到elements的後面則是下面這樣</p>
<pre class="brush: jscript;">
$(&quot;p.appendToMe&quot;).append($(&quot;a.appendMe&quot;));
</pre>
<p>對於append()中的elements的處理有一點要注意的是<br />
如果目標elements( 在這裡是$("p.appendToMe") )只有一個element<br />
則會把append()中取得的elements整個搬過去(也就是move過去)<br />
而如果有多個elements的話 則是每個目標element都複製一個<br />
而且原本的elements還是會留著</p>
<div class="method">appendTo(target)</div>
<p>還有另一個跟append()相反用法的method<br />
這是將elements加到目標elements的後面<br />
可以對照append()來看</p>
<pre class="brush: jscript;">
$(&quot;a.appendMe&quot;).appendTo($(&quot;p.appendToMe&quot;));
</pre>
<p>同樣的 如果目標只有一個 就會move過去<br />
目標有很多個的話 就會各複製一個 並且原本的也會留著</p>
<p>有將內容加到後面 當然也有加到前面的</p>
<div class="method">prepend()</div>
<p>這個則是加到內容的前面 其餘用法跟append()一樣</p>
<div class="method">prependTo()</div>
<p>這個則是加到內容的前面 其餘用法跟appendTo()一樣</p>
<p>前面4個method說的是在目標tag中的內容<br />
而要放置在tag之外前面或後面也有另外的method可以使用</p>
<div class="method">before()</div>
<p>將內容加到目標elements的tag前面</p>
<div class="method">insertBefore()</div>
<p>就跟append()與appendTo()的關係一樣<br />
這是跟before()相反</p>
<div class="method">after()</div>
<p>將內容加到目標elements的tag後面</p>
<div class="method">insertAfter()</div>
<p>就跟append()與appendTo()的關係一樣<br />
這是跟after()相反</p>
<div class="subtitle">3.3.3 Wrapping elements</div>
<div class="method">wrap(wrapper)</div>
<p>在elements外再包一層tag(前後都加上tag)</p>
<pre class="brush: jscript;">
$(&quot;a.surprise&quot;).wrap(&quot;&lt;div class='hello'&gt;&lt;/div&gt;&quot;);
</pre>
<p>將class=surprise的&lt;a>的外面包一層&lt;div></p>
<pre class="brush: xml;">
&lt;a class=&quot;surprise&quot; href=&quot;#&quot;&gt;here&lt;/a&gt;
會變成
&lt;div class='hello'&gt;&lt;a class=&quot;surprise&quot; href=&quot;#&quot;&gt;here&lt;/a&gt;&lt;/div&gt;
</pre>
<div class="method">wrapAll(wrapper)</div>
<p>wrap()是將elements中每個element都包一層<br />
而wrapAll()則是對整個elements包一層</p>
<div class="method">wrapInner(wrapper)</div>
<p>將elements中的內容包一層</p>
<div class="subtitle">3.3.4 Removing elements</div>
<div class="method">remove()</div>
<p>將elements從DOM中移除<br />
但是之後還是可以拿來使用(例如利用appendTo(),prependTo()來繼續使用這組elements)</p>
<div class="method">empty()</div>
<p>將elements中的內容清除</p>
<div class="subtitle">3.3.5 Cloning elements</div>
<div class="method">clone(copyHandlers)</div>
<p>複製這組elements來使用<br />
參數copyHandlers是個boolean<br />
如果這個參數為true的話 那就會連操作事件也一起複製<br />
如果為false或是省略 則是只有複製elements</p>
<div class="title">3.4 Dealing with form element values</div>
<div class="method">val(value)</div>
<p>當value省略時 是取得form中elements的值<br />
而有值是設定這個element的值</p>
<div class="method">val(values)</div>
<p>還有另一個用法是<br />
將所有符合的elements選取(也就是設定為checked或selected)</p>
<pre class="brush: jscript;">
$('input,select').val(['one','two','three']);
</pre>
<p>搜尋頁面上所有的&lt;input> (即type=checkbox或type=radio)跟&lt;select><br />
如果他們的值為one、two或是three<br />
則將他們選取</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.2 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch2-creating-the-wrapped-element-set/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch2-creating-the-wrapped-element-set/#comments</comments>
		<pubDate>Wed, 13 May 2009 13:14:35 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[jquery]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=231</guid>
		<description><![CDATA[Ch.2 Creating the wrapped element set .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 第二章會詳細介紹$()的兩個常用的功能: selectors 跟 創建新的DOM elements 2.1 Selecting elements for manipulation 在操作任何動作前 都必須要先會取得自己需要操作的elements 這邊有提供一個可以下載來練習selectors的Selectors Lab網頁 可以在原文版的首頁下載得到 (找到一個名字為Source code的連結下載) 2.1.1 Using basic CSS selectors 一開始先講解幾個基本的css selectors 這可以咕狗研究一下 而jQuery就是在$()裡使用selectors //這個就是取得&#60;p&#62;中有class=specialClass的&#60;a&#62; $(&#34;p a.specialClass&#34;) 2.1.2 Using child, container, and attribute selectors 而當需要取得更精細更複雜的selectors 時 就可以用到jQuery內建的功能 首先以child selectors來說 大意就是說 如果要取得特定的elements ul.mylist > li [...]]]></description>
			<content:encoded><![CDATA[<p>Ch.2 Creating the wrapped element set<br />
<span id="more-231"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<p>第二章會詳細介紹$()的兩個常用的功能: selectors 跟 創建新的DOM elements</p>
<div class="title">2.1 Selecting elements for manipulation</div>
<p>在操作任何動作前 都必須要先會取得自己需要操作的elements<br />
這邊有提供一個可以下載來練習selectors的Selectors Lab網頁<br />
可以在<a href="http://www.manning.com/bibeault/" target="_blank">原文版的首頁下載得到</a><br />
(找到一個名字為Source code的連結下載)</p>
<div class="subtitle">2.1.1 Using basic CSS selectors</div>
<p>一開始先講解幾個基本的css selectors<br />
這可以<a href="http://www.google.com.tw/search?q=css+%E9%81%B8%E6%93%87%E5%99%A8&#038;ie=utf-8&#038;oe=utf-8&#038;aq=t&#038;rls=org.mozilla:zh-TW:official&#038;client=firefox-a" target="_blank">咕狗研究一下</a><br />
而jQuery就是在$()裡使用selectors</p>
<pre class="brush: jscript;">
//這個就是取得&lt;p&gt;中有class=specialClass的&lt;a&gt;
$(&quot;p a.specialClass&quot;)
</pre>
<div class="subtitle">2.1.2 Using child, container, and attribute selectors</div>
<p>而當需要取得更精細更複雜的selectors 時<br />
就可以用到jQuery內建的功能</p>
<p>首先以child selectors來說<br />
大意就是說 如果要取得特定的elements<br />
ul.mylist > li > a 可以比 ul.mylist li a取得更精確的elements<br />
有包含 > 的是指有上下層關係(也就是parents跟child的關係) li一定在ul下面一層 而a一定在li下面一層<br />
沒有 > 的就是指所有包在裡面的都算在內 不管隔了幾層</p>
<p>而attribute selectors就是<br />
可以對各tag的屬性再做篩選 挑出所需要的elements</p>
<pre class="brush: jscript;">
//所有&lt;a&gt;中 屬性href的開頭為http://的&lt;a&gt;
a[href^=http://]
//所以這邊使用 ^ 來代表字的開頭的意思 跟正規表達式的一樣
</pre>
<p>以下是幾個用法</p>
<pre class="brush: jscript;">
//取得所有 type=text的&lt;input&gt;
input[type=text]

//取得所有 title的開頭為my的&lt;div&gt;
div[title^=my]

//取得所有 href的結尾為.pdf的&lt;a&gt; (這也與正規表達式的 $ 一樣)
a[href$=.pdf]

//取得所有 href的值中有包含jquery.com字串的&lt;a&gt;
a[href*=jquery.com]
</pre>
<p>而container selector指的是有包含所指定的selector</p>
<pre class="brush: jscript;">
//取得 含有&lt;a&gt;的&lt;li&gt;
li:has(a)

//但是要注意這個只能夠使用一層 如果是下面這樣
foo:not(bar:has(baz))
//或是
foo:not(bar:has(baz:eq(2)))
//都是無法使用的
</pre>
<p>然後書中有附一張簡表 說明各用法<br />
也可以在<a href="http://docs.jquery.com/Selectors" target="_blank">官網的documentation</a>中找得到</p>
<div class="subtitle">2.1.3 Selecting by position</div>
<p>jQuery也可以依據elements間的位置關係取得所需要的elements</p>
<pre class="brush: jscript;">
//取得 第一個&lt;a&gt;
a:first

//取得 所有奇數的&lt;p&gt; (也就是第1,3,5,7 ...個的&lt;p&gt;)
p:odd
//當然也可以取得偶數的
p:even

//取得 &lt;li&gt;中最後一個child element (也就是&lt;li&gt;下一層中 最後一個element)
li:last-child
</pre>
<p>這邊也有附一個簡表 詳情請看<a href="http://docs.jquery.com/Selectors" target="_blank">官網的documentation</a></p>
<p>而這邊有一點要注意的是<br />
使用:nth-child(n)的時候 這個n是從1開始算起 (1-based)<br />
而其他的如 :eq(n) 或是 :gt(n) 這些是從0開始算起 (0-based)<br />
所以使用:nth-child(2)會等於使用:eq(1)</p>
<div class="subtitle">2.1.4 Using custom jQuery selectors</div>
<p>這小節主要是介紹除了css中可以使用的selectors之外<br />
jQuery自己內建的filter selectors<br />
(filter就是過濾器、過濾、篩選的意思)<br />
這邊也有附一個簡表 詳情請看<a href="http://docs.jquery.com/Selectors" target="_blank">官網的documentation</a></p>
<p>這些filter selectors大部分都是跟form有關的<br />
下面舉幾個例子</p>
<pre class="brush: jscript;">
//取得正在作特效(animations and effects)的elements
:animated

//取得checkbox (這裡就等於input[type=checkbox])
:checkbox

//取得內容有child elements(只有文字也算)的elements (也就是還有下一層)
:parent

//這些selectors也可以連著用
:checkbox:checked:enabled
</pre>
<p>如果想要選擇與selectors的規則相反的filter<br />
可以使用:not</p>
<pre class="brush: jscript;">
//取得不是checkbox的input
input:not(:checkbox)
</pre>
<p>:not這個filter selector中 只能放filter</p>
<pre class="brush: jscript;">
//例如下面這樣是不行的
div :not(p:hidden)

//而這樣是ok的
div p:not(:hidden)
</pre>
<div class="title">2.2 Generating new HTML</div>
<p>建立新的html elements<br />
這裡還有提到一個簡略的方法<br />
如果是要建立一個空的element</p>
<pre class="brush: jscript;">
//這個的用法
$(&quot;&lt;div&gt;&quot;)
//會與下面這兩個一樣
$(&quot;&lt;div&gt;&lt;/div&gt;&quot;)
$(&quot;&lt;div/&gt;&quot;)
</pre>
<div class="title">2.3 Managing the wrapped element set</div>
<p>操作取得的elements<br />
這邊提供了另一個Selectors Lab可以練習<br />
可以在<a href="http://www.manning.com/bibeault/" target="_blank">原文版的首頁下載得到</a><br />
(找到一個名字為Source code的連結下載)</p>
<div class="subtitle">2.3.1 Determining the size of the wrapped set</div>
<div class="method">size()</div>
<p>取得selector所會操作的elements個數 使用size()</p>
<pre class="brush: jscript;">
$('a').size()
</pre>
<p>例如取得頁面上有幾個連結(也就是&lt;a>)</p>
<div class="subtitle">2.3.2 Obtaining elements from the wrapped set</div>
<div class="method">get()</div>
<p>因為jQuery可以把一個取得的elements當作一個array來使用<br />
所以如果要取得特定的element 可以依照他的index獲得<br />
例如要取得第一個element</p>
<pre class="brush: jscript;">
//可以使用
$('img[alt]')[0]
//而如果要用method來取得的話 可以使用get()
$('img[alt]').get(0)
</pre>
<p>如果沒有填入index值的話 則會返回一個含有所有的elements的array</p>
<div class="method">index()</div>
<p>而要取得某一個element在 一個selector中取得的elements 裡的index<br />
(也就是排序的位置 第一個就是0 第二個就是1)<br />
可以使用index()</p>
<pre class="brush: jscript;">
//取得 bid=findMe的&lt;img&gt; 在所有&lt;img&gt;中的index
var n = $('img').index($('img#findMe')[0]);
</pre>
<p>如果要取得index的element不在這些elements裡 則會返回-1</p>
<div class="subtitle">2.3.3 Slicing and dicing the wrapped element set</div>
<div class="method">add()</div>
<p>在已經取得的elements之外 再取得另外的elements一起作操作</p>
<pre class="brush: jscript;">
//對含有alt屬性的&lt;img&gt;操作
$('img[alt]')
//除了含有alt的&lt;img&gt;之外 再加上含有title的&lt;img&gt; 再一起對這些符合條件的elements操作
$('img[alt]').add('img[title]')
//當然在這個例子中 如果使用下面這樣也是可以
$('img[alt],img[title]')
//但是如果要先對含有alt的&lt;img&gt;操作 再對這兩種elements操作
//就必須要用到add()了
//
//在add()裡也可以加入新建立的html elements(像是2.2講的那樣)
$('p').add('&lt;div&gt;Hi there!&lt;/div&gt;')
</pre>
<div class="method">not()</div>
<p>可以加入特定的elements 同樣的也是可以減少<br />
這邊使用的not() 有點類似前面講的:not<br />
而這個not()的使用的方法就跟add()一樣</p>
<pre class="brush: jscript;">
//取得有title屬性 但是title值不包含puppy這個字串的&lt;img&gt;
$('img[title]').not('[title*=puppy]')
</pre>
<div class="method">filter()</div>
<p>除了add()跟not()之外<br />
如果需要更多條件來挑出需要的elements<br />
可以使用filter()</p>
<pre class="brush: jscript;">
//取得所有innerHTML為數字的&lt;td&gt;
$('td').filter(function(){return this.innerHTML.match(/^d+$/)})
</pre>
<p>filter()跟not()的用法有點類似<br />
但是條件剛好是相反的</p>
<pre class="brush: jscript;">
//這裡是指篩選出title值含有dog字串的
$('img').addClass('seeThrough').filter('[title*=dog]').addClass('thickBorder')
//但如果是not() 就是把title值含有dog字串的拿掉
$('img').addClass('seeThrough').not('[title*=dog]').addClass('thickBorder')
</pre>
<p>add()、not()、filter()三種method可以很靈活的增減所需要的elements</p>
<div class="method">slice(begin,end)</div>
<p>取得elements中特定的index的element(例如index為2~5的elements)<br />
slice()有兩個參數 型態都是數字 皆由0開始算(zero-based)<br />
第1個參數begin 為開始取得的index值 如果為負數就是由尾巴開始取值<br />
第2個參數end 就是要取到第幾個為止 如果省略的話就是取到最後(這個參數所指的該index不會被取得 只會到前一個)</p>
<pre class="brush: jscript;">
//取得頁面上前4個elements
$('*').slice(0,4);
//取得頁面上除了前4個elements之外的elements 也就是從第5個element開始取得 到最後1個
$('*').slice(4);
</pre>
<div class="subtitle">2.3.4 Getting wrapped sets using relationships</div>
<p>這邊有一個簡表列出其他可以篩選出elements的methods<br />
詳情請看<a href="http://docs.jquery.com/Traversing" target="_blank">官網的documentation</a><br />
這些methods返回的都是新的一組elements 不會影響到原本的elements<br />
下面舉幾個例子</p>
<pre class="brush: jscript;">
//取得該elements所有的child elements
children()
//取得該elements的下一個同一層的element
next()
//取得該elements之後所有同一層的elements
nextAll()
//取得該elements的所有同一層不重複的elements
siblings()
</pre>
<p>這些methods除了contents()之外 其他的都可以再在裡面用字串來篩選出elements</p>
<div class="subtitle">2.3.5 Even more ways to use a wrapped set</div>
<div class="method">find()</div>
<p>對一組已經篩選出的elements作另一個selectors的篩選</p>
<pre class="brush: jscript;">
//取得在&lt;p&gt;中的&lt;span&gt;
$(&quot;p&quot;).find(&quot;span&quot;)
</pre>
<p>雖然上面這個例子跟$(&#8216;p span&#8217;)的用法一樣<br />
但是如果需要在chains中使用 就必須用到find()</p>
<div class="method">contains()</div>
<pre class="brush: jscript;">
//取得在&lt;p&gt;中有包含'Lorem ipsum'這個字串的elements
$('p').contains('Lorem ipsum')
</pre>
<p>對一組已經篩選出的elements作字串的篩選</p>
<div class="method">is()</div>
<p>對一組已經篩選出的elements作另一個selectors的查找 是否有包含此selectors</p>
<pre class="brush: jscript;">
//檢查頁面上是否有至少一個&lt;img&gt;
var hasImage = $('*').is('img');
</pre>
<p>返回值是個boolean<br />
如果有找到就是返回true 反之則是false</p>
<div class="subtitle">2.3.6 Managing jQuery chains</div>
<p>這小節會說明2個在chain中變換<b>可以操作的elements</b>的method</p>
<div class="method">end()</div>
<p>在一個chain中如果先變換了操作的elements<br />
但是在後面又要操作原本的elements<br />
就要使用到end()<br />
(clone()在ch3會講 這是一個複製elements的method)</p>
<pre class="brush: jscript;">
$('img').clone().appendTo('#somewhere').end().addClass('beenCloned');
</pre>
<p>先對所有的&lt;img>作複製<br />
再把這些複製的elements加到id=somewhere的element中<br />
而因為要再對原本的elements(所有&lt;img>)加上class=beenCloned<br />
所以加上end()後再加上addClass(&#8216;beenCloned&#8217;)<br />
如果沒有end() 而直接加addClass(&#8216;beenCloned&#8217;)<br />
那就是會加到複製的elements上 而不是原本的elements</p>
<div class="method">andSelf()</div>
<p>在一個chain中如果先變換了操作的elements<br />
但是在後面又要對原本的elements一起操作<br />
就要使用到andSelf()</p>
<pre class="brush: jscript;">
$(&quot;div&quot;).find(&quot;p&quot;).andSelf().addClass(&quot;border&quot;);
</pre>
<p>如果沒有加上andSelf() 就是只有&lt;div>中的&lt;p>會加上class=border<br />
如果加上了 就是 &lt;div> 跟 &lt;div>中的&lt;p> 都會加上class=border</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch2-creating-the-wrapped-element-set/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery in Action Ch.1 筆記</title>
		<link>http://blog.hsin.tw/2009/jquery-in-action-ch1-introuducing-jquery/</link>
		<comments>http://blog.hsin.tw/2009/jquery-in-action-ch1-introuducing-jquery/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 14:52:07 +0000</pubDate>
		<dc:creator>hsin</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://blog.hsin.tw/?p=190</guid>
		<description><![CDATA[Ch.1 Introuducing jQuery .method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;} .title{background-color:#dddddd;color:#000000;margin-top:25px;} .subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;} 1.1 Why jQuery? $(&#34;table tr:nth-child(even)&#34;).addClass(&#34;striped&#34;); 使用一行js碼(對table裡的偶數行加上不同的class來讓表格較清楚)的例子，來介紹jQuery的簡潔及強大 1.2 Unobtrusive JavaScript (unobtrusive應該是無侵入的、不唐突的、低調的 的意思) &#60;button type=&#34;button&#34; onclick=&#34;document.getElementById('xyz').style.color='red';&#34;&#62; Click Me &#60;/button&#62; &#60;!-- 將以上html中的行為(behavior)抽出成如下 --&#62; &#60;button type=&#34;button&#34; id=&#34;testButton&#34;&#62;Click Me&#60;/button&#62; 而將這些行為(也就是script，在這裡也就是onclick這個trigger)移到裡面 window.onload = function() { document.getElementById('testButton').onclick = makeItRed; }; function makeItRed() { document.getElementById('xyz').style.color = 'red'; }; 將這段script放在onload handler中並指派onclick給makeItRed()這個函式 而擺在onload handler裡是為了確保在觸發onclick之前 這個button已經存在了(也就是DOM都已經讀取完畢) 1.3 jQuery fundamentals 如果已經熟悉css的人 [...]]]></description>
			<content:encoded><![CDATA[<p>Ch.1 Introuducing jQuery<br />
<span id="more-190"></span></p>
<style>
.method{background-color:#ffffcc;color:#000000;margin:10px;width:200px;text-align:center;}
.title{background-color:#dddddd;color:#000000;margin-top:25px;}
.subtitle{background-color:#eeeeee;color:#000000;;margin-top:10px;}
</style>
<div class="title">1.1 Why jQuery?</div>
<pre class="brush: jscript;">
$(&quot;table tr:nth-child(even)&quot;).addClass(&quot;striped&quot;);
</pre>
<p>使用一行js碼(對table裡的偶數行加上不同的class來讓表格較清楚)的例子，來介紹jQuery的簡潔及強大</p>
<div class="title">1.2 Unobtrusive JavaScript</div>
<p>(unobtrusive應該是無侵入的、不唐突的、低調的 的意思)</p>
<pre class="brush: xml;">
&lt;button
type=&quot;button&quot;
onclick=&quot;document.getElementById('xyz').style.color='red';&quot;&gt;
Click Me
&lt;/button&gt;
&lt;!--
將以上html中的行為(behavior)抽出成如下
--&gt;
&lt;button type=&quot;button&quot; id=&quot;testButton&quot;&gt;Click Me&lt;/button&gt;
</pre>
<p>而將這些行為(也就是script，在這裡也就是onclick這個trigger)移到裡面</p>
<pre class="brush: jscript;">
window.onload = function() {
document.getElementById('testButton').onclick = makeItRed;
};
function makeItRed() {
document.getElementById('xyz').style.color = 'red';
};
</pre>
<p>將這段script放在onload handler中並指派onclick給makeItRed()這個函式<br />
而擺在onload handler裡是為了確保在觸發onclick之前 這個button已經存在了(也就是DOM都已經讀取完畢)</p>
<div class="title">1.3 jQuery fundamentals</div>
<p>如果已經熟悉css的人 那對於jQuery使用的selectors(選擇器)就可以很容易上手的</p>
<div class="subtitle">1.3.1 The jQuery wrapper</div>
<p>jQuery除了一般在css中使用的selectors外，還有其他更有用更強大的selectors可以使用(下面會介紹)</p>
<pre class="brush: jscript;">
$(selector)
jQuery(selector)
</pre>
<p>jQuery中使用selector的用法有以上這兩個<br />
然後舉了幾個例子</p>
<pre class="brush: jscript;">
$(&quot;div.notLongForThisWorld&quot;).fadeOut();
//這樣會對於class=notLongForThisWorld的div作fadeOut(這是一種效果，後面會介紹)
//就跟css中的用法幾乎一模一樣
$(&quot;div.notLongForThisWorld&quot;).fadeOut().addClass(&quot;removed&quot;);
//也可以這樣連續著用 也就是fadeOut完後再加上一個removed的className
//這也就是chains(連鎖)的用法
</pre>
<p>而這個用法好處在於我們不需要再用迴圈去跑 對每一個class=notLongForThisWorld的div操作</p>
<p>而jQuery也可以將一個使用highly sophisticated JavaScript object(我想可能是指ID這類的element)的selector的寫法寫成一個取得成array的elements(就算selector只match得到一個element)</p>
<pre class="brush: jscript;">
//第一種用法
$(&quot;#someElement&quot;).html(&quot;I have added some text to an element&quot;);
//第二種用法
$(&quot;#someElement&quot;)[0].innerHTML = &quot;I have added some text to an element&quot;;
//這兩種用法的效果是一樣的 不過通常都是用第一種即可
</pre>
<p>而當要對某些elements操作的時候 也是有下面兩種方法</p>
<pre class="brush: jscript;">
//第一種方法
$(&quot;div.fillMeIn&quot;).html(&quot;I have added some text to a group of nodes&quot;;
//第二種方法
var elements = $(&quot;div.fillMeIn&quot;);
for(i=0;i&lt;elements.length;i++)
elements[i].innerHTML=&quot;I have added some text to a group of nodes&quot;;
//不過通常都是用第一種即可
</pre>
<p>再來就是舉了幾個操作elements時會用到的selectors 除了在css中會使用到的之外 也有其他jQuery中才有的selectors</p>
<pre class="brush: jscript;">
//取得所有偶數位的&lt;p&gt;
$(&quot;p:even&quot;);

//取得每一個&lt;table&gt;中第一個&lt;tr&gt;
$(&quot;tr:nth-child(1)&quot;);

//取得所有為&lt;body&gt;的節點的&lt;div&gt;
$(&quot;body &gt; div&quot;);

//取得所有href為pdf檔的&lt;a&gt;
$(&quot;a[href$=pdf]&quot;);

//取得所有為&lt;body&gt;的節點並且含有&lt;a&gt;的&lt;div&gt;
$(&quot;body &gt; div:has(a)&quot;)
</pre>
<p>還有很多有用的selectors <a href="http://docs.jquery.com/Selectors" target="_blank">可以看這裡~</a></p>
<div class="subtitle">1.3.2 Utility functions</div>
<p>jQuery除了selectors外 另外還有可以使用namespace prefix的用途<br />
(有點類似$()的method的使用方法)</p>
<pre class="brush: jscript;">
//一個去掉字串前後空白的namespace即命名成下面這樣
$.trim(someString);
</pre>
<p>第六章還會詳細說明 因為在第六章之前有些地方會用到 所以這裡先稍微講一下</p>
<div class="subtitle">1.3.3 The document ready handler</div>
<p>要對elements操作 必須在DOM裡面的elements都load完才行<br />
所以必須要有個onload的方法<br />
傳統上是使用window.onload</p>
<pre class="brush: jscript;">
// 1.1中的例子
window.onload = function() {
$(&quot;table tr:nth-child(even)&quot;).addClass(&quot;even&quot;);
}
</pre>
<p>而這個方法的缺點就是除了DOM讀取完之外<br />
他還會等所有的圖或是其他的東西load完 才會執行javascript<br />
較好的作法是只要DOM讀取完了就執行<br />
而jQuery就提供了一個簡單的方法 來解決這個問題</p>
<pre class="brush: jscript;">
$(document).ready(function() {
$(&quot;table tr:nth-child(even)&quot;).addClass(&quot;even&quot;);
});
//也可以簡寫成這樣
$(function() {
$(&quot;table tr:nth-child(even)&quot;).addClass(&quot;even&quot;);
});
</pre>
<p>而這個方法可以在同一個html document中寫很多次<br />
都會等到DOM讀取完才執行 商當之方便~</p>
<div class="subtitle">1.3.4 Making DOM elements</div>
<p>jQuery可以直接建立一個DOM的element<br />
然後對這個element作操作</p>
<pre class="brush: jscript;">
$(function(){
$(&quot;&lt;p&gt;Hi there!&lt;/p&gt;&quot;).insertAfter(&quot;#followMe&quot;);
});
</pre>
<p>這個例子就是建立一個&lt;p>Hi there!&lt;/p>這樣的element<br />
然後插入在id=followMe的標籤之後 (insertAfter是jQuery的一個manipulation function)</p>
<div class="subtitle">1.3.5Extending jQuery</div>
<p>jQuery還有一個強大的功能<br />
就是可以以一個很簡單的方式建立自己所需要的method</p>
<pre class="brush: jscript;">
//disable原本不是jQuery內建的method
$(&quot;form#myForm input.special&quot;).disable();
//而以下面的方式就可以建立自己所需要功能的method
$.fn.disable = function() {
return this.each(function() {
if (typeof this.disabled != &quot;undefined&quot;) this.disabled = true;
});
}
//而且以這個方式創建好的method也可以同樣的使用在jQuery的chain中 如下
$(&quot;form#myForm input.special&quot;).disable().addClass(&quot;moreSpecial&quot;);
</pre>
<p>而jQuery裡為數眾多的plugins也大多是使用這個方式建立的</p>
<div class="subtitle">1.3.6Using jQuery with other libraries</div>
<p>要和其他javascript lib(如prototype.js)在同一個頁面共用 又要避免衝突的話<br />
jQuery提供一個方法來解決</p>
<pre class="brush: jscript;">
$jq = jQuery.noConflict();
//加上這一行 就可以以$jq()來當作$()操作
//也同時可以避免與其他lib衝突到(prototype.js也是使用$()這個)
//$jq不是固定的 可以自己改變喔
</pre>
<p>不過我覺得沒特別真的需要<br />
一個頁面還是使用一種lib就好啦 XD<br />
總覺得load會太重</p>
<p><!--div class="article_title">1.4Summary</div>
<p>也就是summary.. .XD<br />
這本書是以1.2.1版本來講解<br />
其他更新的版本可以在<a href="http:// jquery.com/" target="_Blank">http://jquery.com/</a>裡找得到<br />
囧 第一章只是介紹而已<br />
寫半天~~~  &lt;囧&gt;</p>
<div style="height: 50px;"></div-->
]]></content:encoded>
			<wfw:commentRss>http://blog.hsin.tw/2009/jquery-in-action-ch1-introuducing-jquery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
