jQuery Manipulation 主要是用來操作 DOM 元素的新增、刪除與修改等。
變更元素內容 (Changing Contents)
.html() :取得或變更元素內容,這個功能類似 JavaScript 中的 innerHTML
.text() :取得或變更元素內容(純文字)
<p>改變<b>元素</b>內容</p>
<script type="text/javascript">
var p = $("p:last");
//取得物件的 innerHTML
var html = p.html() //改變<b>元素</b>內容
//變更物件的 innerHTML
p.html("<b style='color:red'>元素內容已變</b>");
//取得物件的 innerText
var html = p.text(); //元素內容已變
//變更物件的 innerText
p.text("內容<b style='color:blue'>已變</b>"); //內容<b style='color:blue'>已變</b>
</script>
.replaceWith() :removes content from the DOM and replaces it with something
$("h2").replaceWith("<h1>Page Title</h1>"); //使用 <h1> 標籤取式 <h2> 標籤
插入元素 (Inserting)
.append() :將指定的元素插入到集合中的元素(內部插入)
.prepend() :在每個匹配的元素內部最前面加入(內部插入)
.before() :在每個匹配的元素前面加入(外部插入)
.after() :在每個匹配的元素後面加入(外部插入)
<p class="insert">插入1</p> <p class="insert">插入2</p>
<script type="text/javascript">
var p = $(".insert");
p.append("元素"); //<p>插入1元素</p>
//<p>插入2元素</p>
p.prepend("在前面"); //<p>在前面插入1元素</p>
//<p>在前面插入2元素</p>
p.before("(1)"); //(1)<p>在前面插入1元素</p>
//(1)<p>在前面插入2元素</p>
p.after("(...)"); //(1)<p>在前面插入1元素</p>(...)
//(1)<p>在前面插入2元素</p>(...)
</script>
.appendTo() :將集合中的元素插入指定的元素中,做為最後的子元素
.prependTo() :將集合中的元素插入指定的元素中,當做最前的子元素
.insertBefore() :將集合中的元素插入到指定元素之前
.insertAfter() :將集合中的元素插入到指定元素之後
<p class="appendTo">appendTo插入</p> <p class="prependTo">prependTo插入</p>
<script type="text/javascript">
var obj1 = $("<a href='http://abc'>xyz</a>");
obj1.appendTo($(".appendTo"));
var obj2 = $("<a href='http://abc'>xyz</a>");
obj2.prependTo($(".prependTo"));
</script>
移動元素 (moving)
同樣使用上面的函式,若參數值是一個 「jQuery」或「DOM」物件,則代表移動它們:
<span id='hello'> Hello </span> <span id='hi' style="color:Red"> Hi </span>
將 Hello 移到 Hi 裡面的後頭
$("#hi").append($("#hello"));
將 Hello 移到 Hi 裡面的前頭
$("#hi").prepend($("#hello"));
將 Hello 移到 Hi 前面
$("#hi").before($("#hello"));
將 Hello 移到 Hi 後面
$("#hi").after($("#hello"));
包裹元素 (wraping)
.wrap() :Wrap an HTML structure around each element in the set of matched elements.
<span id='Span3'> Hello </span> <span id='Span4'> Hello </span>
$("#Span1, #Span2").wrap("<span style='color:Red'></span>");
<span style="COLOR: red"><span id="Span1">Hello </span></span> <span style="COLOR: red"><span id="Span2">Hello </span></span>
其他相關的方法還有:
$(X).wrapAll(Y) :將所有 X 元素集中在一起並用一個Y包起來
$(X).wrapInner(Y) :將 X 的子元素用 Y 包起來
$(X).replaceWith(Y) :將 X 置換成 Y
$(X).replaceAll(Y) :以 X 去置換 Y
刪除元素 (Removing)
.empty() :Remove all child nodes of the set of matched elements from the DOM.
<p>Hello, <span>Person</span> <a href="#">and person</a></p>
$("p").empty(); //結果:<p></p>
.remove() :Remove the set of matched elements from the DOM.
<p>Hello</p> how are <p>you ?</p>
$("p").remove(); //結果:how are
.detach() :removes the found elements from the DOM.
複製元素 (Copying)
.clone() :Create a deep copy of the set of matched elements.
這個方法預設不會複製資料和事件,如果須要,必須將 withDataAndEvents 參數設成 true 。
<b id='cp1'>☆</b> <span id='cp2'> Hello </span>
$("#copy").click(
function () {
$("#cp2").after($("#cp1").clone()); //結果: ☆ Hello ☆
}
);
暫建物件
以上的說明都是使用頁面中現有的元素,以進行插入、移動、刪除等操作。 jQuery 也可以利用暫建物件的做法,讓我們動態的建立元素。
<div id="Div1">Test Div </div>
<script type="text/javascript">
var obj = $("<a href='http://abc'>xyz</a>");
$("#dvDisp").append(obj);
</script>
<div id="dvDisp">Test Div <a href="http://abc/">xyz</a></div>
jQuery 共用方法
以下是幾個 jQuery 所提供的好用函式:
jQuery.browser :偵測瀏覽器版本
用以偵測瀏覽器版本,它是一個物件,會有 safari、opera、msie、mozilla 及 version 五個屬性,前四個屬性依瀏覽器不同,只有一個屬性會傳回 true,其餘都傳回 false,而 version 則會傳回版號。
jQuery.support :判斷瀏覽器的支援度
由於使用 jQuery.browser 的做法意味著我們要寫死何種瀏覽器支援哪些功能,一旦瀏覽器改版或特性改變時就要修校,因此從 jQuery 1.3 起,jQuery 核心不再用 jQuery.browser 判斷決定不同的做法,而是一律由 jQuery.support.* 傳回 true/flase 判斷瀏覽器的支援度,目前可測試的瀏覽器特性包含了: boxModel、cssFloat、hrefNormalized、htmlSerialize、leadingWhitespace、noCloneEvent、objectAll、opacity、scriptEval、style、tbody。但基於向前相容,jQuery.browser 仍會持續存在。
jQuery.each() :逐一處理 array 中的各元素
jQuery.extend() :將物件內容合併。
列舉集合物件
首先要知道的是, .each() 和 jQuery.each() 是不同的。 前者是 jQuery 物件的列舉,用來列舉某個 jQuery 物件中的元素。 後者是用來列舉集合或陣列中的元素。
jQuery.each() 方法,可以讓我們逐一處理 array 或 obj 集合中的各元素。 若在 each 中 return false 時,若尚未處理到的其他陣列元素/物件屬性則略過不處理
- jQuery.each(array, function() { ... })
將 array 的各元素逐一送給 callback 函數處理,函數中以 this 取得陣列元素內容。 - jQuery.each(object, function(i, val) { ... })
逐一傳入集合物件中各屬性的名稱 (i) 以及值 (val) 給 callback 函數處理。
[例一]
下面範例,我們在一個 div 中,加入4個不同顏色的小 div 。
<script type="text/javascript">
var colors = ["red", "green", "blue", "yellow"];
//利用$.each跑迴圈,在callback中,透過 this 取得陣列中的元素
$.each(colors, function () {
$("<div class='Square' style='background-color:" + this + "'></div>").appendTo("#targetDiv");
});
</script>
[例二]
<script type="text/javascript">
$.each(colors, function (index, value) {
alert(index + ': ' + value);
});
// 0: red
// 1: green
// 2: blue
// 3: yellow
</script>
合併物件內容
jQuery.extend() :將物件內容合併。
jQuery.extend(obj1, obj2[, obj3]):
這個方法會將後面的物件 (obj2, obj3, ...) 的屬性合併到 obj1 中(若同名屬性存在則覆寫之),很常用於指定參數的預設值,例如:
<script type="text/javascript">
var finalSetting = {};
var defaultSetting = { limit: 256, maxRows: 16, maxCols: 16 };
var userOption = { maxRows: 10 };
//第一個參數物件會被修改,為了保持 defaultSetting 不被更動,放在第二個參數
$.extend(finalSetting, defaultSetting, userOption);
$.each(finalSetting, function (i, val) {
alert(i + "->" + val);
});
</script>
沒有留言:
張貼留言