我想一般對於 JavaScript 大部分的操作都用在變動 HTML DOM 元素的屬性跟樣式,如果你有這個經驗,就會知道在設定時會有許多複雜及麻煩的問題,比如說 IE 它 setAttribute 不吃 name 屬性;又像在指定 class 屬性時,名稱不能用 class 而要用 className 等問題。令人開心的,jQuery 已經幫你處理掉中間這些繁雜過程可能遇到的問題了!你只需記得原本的 HTML 和 CSS 是怎樣寫就行。
修改標籤屬性 (Attributes)
變更 attribute
.attr() :取得匹配元素的屬性值
.removeAttr() :移除元素屬性
attr(name) //取得第一個匹配到的元素的屬性值 attr(key, value) //設定匹配到的元素的屬性值: attr(properties) //使用 key/value object 的方式來替所有匹配到的元素設定多個屬性值 removeAttr(name) //移除元素屬性
//取得第一個連結的 title 值: $("a").attr("title"); //取得第一個 img 的 src 值: $("img").attr("src"); //替所有連結的 title 設為 Enjoy jQuery: $("a").attr("title","Enjoy jQuery"); //替所有的圖片設定 src、title 及 alt 屬性: $("img").attr({ src: "logo.gif", title: "jQuery", alt: "jQuery Logo" }); //移除所有連結的 title $("a").removeAttr("title");
example 2:
<a href="http://abc">How </a> <a href="http://def">are </a> <a>you. </a>
<script type="text/javascript"> $("a").first().attr("title", "click me"); $("a").last().attr({ href: "http://xyz", title: "click me" }); </script> //=>
輸出結果
<a href="http://abc" title="click me">How </a> <a href="http://def">are </a> <a href="http://xyz" title="click me">you. </a>
變更 class
對於 class,jQuery 另外提供個別的函式來作 class 增刪的動作,這是為了可以方便疊加與移除特定的 class。
.addClass() :增加 class
.removeClass() :移除 class
<p>Hello</p> <p>and</p> <p>Goodbye</p>
//幫最後一個段落加入 selected 和 highlight 類別: $("p").last().addClass("selected highlight"); // 結果=> <p class="selected highlight">Goodbye</p>
變更 value
.val() :取得或設定輸入欄位的 value 值。
.text() :取得或設定 innerText 的內容
.html() :取得或設定 innerHTML 的內容
存取 input 元素的值
.val() 是一個很常用到的是方法,可以用來取得與設定表單元素的 Value 值。
val() //get val(value) //set
依不同型態的 input 元素,其設定方法或回傳值略有不同:
- textbox
可以直接使用 val() 及 val( val ) 讀取及設定欄位內容 - select
若為單選,val() 傳回的是字串,而 val( val ) 要傳入的也是字串。
當為多選時 (<select multiple="multiple"> 時,則 val() 會傳回字串陣列,由所有選取的選項內容組成,同理此時要設定時也要傳入陣列。
- radio
實務上多半有多個 <input type="radio"> 指定同樣的 name,但指定不同的 value,在使用時選取同一群 radio(可透過 #name) 以 val() 取得被選取 radio 的值。要設定時,則是選取該群 radio,再傳入單一字串的陣列,例如: val([ str ]),就可選取 value 與 str 相同的 radio。 - checkbox
checkbox 常用於多選選項,所以若要一口氣找出所有被勾選的項目,通常可以善用:checked 這個虛擬類別 (Pseudo Class) 一次將被勾選的 checkbox 找出來,再逐一用 val() 取值。而要設定時則與 radio 相同,先選取所有可能選項的 checkbox,傳入字串陣列,jQuery 會逐一比對,將吻合者勾選起來。
如果是 checkbox, select, radio 元素,則參數 value 為一個 Array<string>
<input type="text" />
$("input").val("Hello World!"); //output => <input type="text" value="Hello World!" />
存取 Html 元素的內容
jQuery 提供了 html()、text() 可取得 innerHTML 及 innerText 內容
<div class="demo-container"> <div>Demo Div</div> <span>DemoSpan</span> <a href="http://abc">abc</a> </div>
$('div.demo-container').text(); //Demo DivDemoSpan abc $('div.demo-container').html(); //<DIV>Demo Div</DIV><SPAN>DemoSpan</SPAN> <A href="http://abc">abc</A>
修改標籤樣式 (CSS)
傳統 JavaScript 在處理 css 的問題上簡直頭大,設定一個 background-color , 你得先知道必須改用 elem.style.backgroundColor來設定;對透明度 opacity 設定上你必須了解 IE 是用 filter 屬性名稱來指定透明度。 也就是 javascript 用來設定樣式的屬性名稱和 CSS 中的名稱不一定相同,你必須事先知道二者的差異。 jQuery 的寫法就簡單多了,可以直接用 key/value 成對的一組屬性來設定,而且只要知道 CSS 的表達式就沒問題。
變更 CSS
.css() :
css(name) //取得第一個匹配到的元素之樣式: css(name,value) //替所有匹配到元素設定一種樣式: css(properties) //替所有匹配到元素設定多種樣式,使用逗號分隔多個 key/value 樣式給所有匹配的元素:
例
//取得第一個段落的字體顏色: $("p").css("color"); //設定一個樣式 $("p").css("color","red"); //同時設定多個樣式:字體設為紅色+背景設為藍色: $("p").css({ "color":"red", "background-color":"blue" }); //==> <p style="BACKGROUND-COLOR: blue; COLOR: red">Hello</p>
使用 jQuery 設定樣式,不僅不用擔心屬性名稱不同問題,而且它還會幫我們處理好跨瀏覽器的問題。如下面範例:
//替所有段落的透明度設為半透明: $("p").css("opacity","0.5");
這段範例是用來設定透明度,jQuery會自動處理好跨瀏覽器問題,當遇到不同瀏覽器時,其輸出會不同:
<p style="FILTER: alpha(opacity=50); ZOOM: 1">Hello</p>
<p style="opacity : 0.5;">Hello</p>
變更元素的寬高和位置
.height() :取得或設定元素的高度
.width() :取得或設定元素的寬度
$("p").height(); //取得第一個段落的高度 $("p").height(20); //將所有段落的高度設作20px
.offset() :取得或設定元素左上角的座置
<p>Hello</p> <input id="Button1" type="button" value="Button5" />
<script type="text/javascript"> $(document).ready(function () { $("#Button5").click( function () { var p = $("p:last"); var coordinates = p.offset(); coordinates.left += 10; p.offset(coordinates); } ); }); </script>
沒有留言:
張貼留言