jQuery DOM 操作 (Manipulation)
jQuery Manipulation 主要是用來操作 DOM 元素的新增、刪除與修改等。
改變元素內容 (Changing Contents)
.html()
- 類似 JavaScript DOM 中的 innerHTML
// 取得匹配元素的 HTML 內容 (無參數)
.html()
// 設定匹配元素的HTML內容 (有參數)
.html(htmlString)
例如:
// HTML
<div></div>
// jQuery
$('div').html('<p>Hello World</p>');
// 得到的結果
[<div><p>Hello World</p></div>]
若包含 <script>
, <link rel="stylesheet">
這些外部檔案 jQuery 會幫你載入,而 <script></script>
間的程式碼 jQuery 則會幫你 eval。
.text()
純文字內容
// 取得一個字串包含著所有匹配元素的純文字內容 (無參數)
.text()
// 例如 HTML
<p><em>Test1.</em>Test12.</p><p>Test3</p>
// jQuery
$('p').text();
// 得到的結果
Test1.Test2.Test3
// 設定所有匹配元素的純文字內容 (有參數)
// text 裡面的 "<" 與 ">" 會自動被轉成 HTML entities
.text(text)
插入內容 (Inserting)
相關函式有 .append()
, .prepend()
, .before()
, .after()
等。
.append(content) - 在每個匹配的元素內部最後面加入內容 (內部插入)
// 例如 HTML
<p>I would like to say: </p>
// jQuery
$('p').append('<b>Hello</b>');
// 得到的結果
[<p>I would like to say: <b>Hello</b></p>]
.prepend(content) - 在每個匹配的元素內部最前面加入... (內部插入)
// 例如 HTML
<p>I would like to say: </p>
// jQuery
$('p').prepend('<b>Hello</b>');
// 得到的結果
[<p><b>Hello</b>I would like to say: </p>]
.before(content) - 在每個匹配的元素前面加入... (外部插入)
// 例如 HTML
<p>I would like to say: </p>
// jQuery codes
$('p').before('<b>Hello</b>');
// 得到的結果
[<b>Hello</b><p>I would like to say: </p>]
.after(content) - 在每個匹配的元素後面加入... (外部插入)
// 例如 HTML
<p>I would like to say: </p>
// jQuery
$('p').after('<b>Hello</b>');
// 得到的結果
[<p>I would like to say: </p><b>Hello</b>]
移動元素 (Moving)
如果在前面這些函式的參數中帶入 "jQuery" 或 "DOM" 物件則代表移動它們。
.append(jQuery or DOM)
// 例如 HTML
<p>I would like to say: </p><b>Hello</b>
// jQuery
$('p').append( $('b') );
// 得到的結果
[<p>I would like to say: <b>Hello</b></p>]
.prepend(jQuery or DOM)
// 例如 HTML
<p>I would like to say: </p><b>Hello</b>
// jQuery
$('p').prepend( $('b') );
// 得到的結果
[<p><b>Hello</b>I would like to say: </p>]
.before(jQuery or DOM)
// 例如 HTML
<p>I would like to say: </p><b>Hello</b>
// jQuery
$('p').before( $('b') );
// 得到的結果
[<b>Hello</b><p>I would like to say: </p>]
.after(jQuery or DOM)
// 例如 HTML
<b>Hello</b><p>I would like to say: </p>
// jQuery
$('p').after( $('b') );
// 得到的結果
[<p>I would like to say: </p><b>Hello</b>]
把自己包起來 (Inserting Around)
.wrap(html) - 各別包住匹配到的元素
// 例如 HTML
<div class="container">
<div class="inner">Hello</div>
<div class="inner">Goodbye</div>
</div>
// jQuery
$('.inner').wrap('<div class="new"></div>');
// 得到的結果
<div class="container">
<div class="new">
<div class="inner">Hello</div>
</div>
<div class="new">
<div class="inner">Goodbye</div>
</div>
</div>
.wrapAll(html) - 一起包住所有匹配到的元素
// 例如 HTML
<div class="container">
<div class="inner">Hello</div>
<div class="inner">Goodbye</div>
</div>
// jQuery
$('.inner').wrapAll('<div class="new" />');
// 得到的結果
<div class="container">
<div class="new">
<div class="inner">Hello</div>
<div class="inner">Goodbye</div>
</div>
</div>
.wrapInner(html) - 各別包到匹配的元素裡面
// 例如 HTML
<div class="container">
<div class="inner">Hello</div>
<div class="inner">Goodbye</div>
</div>
// jQuery
$('.inner').wrapInner('<div class="new"></div>');
// 得到的結果
<div class="container">
<div class="inner">
<div class="new">Hello</div>
</div>
<div class="inner">
<div class="new">Goodbye</div>
</div>
</div>
刪除元素 (Removing)
.empty() - 刪除匹配到的元素其所有子節點
// 例如 HTML
<div class="container">
<div class="hello">Hello</div>
<div class="goodbye">Goodbye</div>
</div>
// jQuery
$('.hello').empty();
// 得到的結果
<div class="container">
<div class="hello"></div>
<div class="goodbye">Goodbye</div>
</div>
.remove([selector]) - 從 DOM 中刪除所有匹配到的元素
// 例如 HTML
<div class="container">
<div class="hello">Hello</div>
<div class="goodbye">Goodbye</div>
</div>
// jQuery
$('.hello').remove();
// 得到的結果
<div class="container">
<div class="goodbye">Goodbye</div>
</div>
// 我們也可以多帶入一個 selector 參數,來過濾匹配到的元素
// 例如這樣寫和上面會得到一樣的結果
$('div').remove('.hello');
複製元素 (Copying)
.clone([true]) - 複製匹配元素的副本
// 例如 HTML
<div class="container">
<div class="hello">Hello</div>
<div class="goodbye">Goodbye</div>
</div>
// jQuery
$('.hello').clone().appendTo('.goodbye');
// 得到的結果
<div class="container">
<div class="hello">Hello</div>
<div class="goodbye">
Goodbye
<div class="hello">Hello</div>
</div>
</div>
// 但如果沒用 .clone() 則會得到這樣的結果
<div class="container">
<div class="goodbye">
Goodbye
<div class="hello">Hello</div>
</div>
</div>
如果想要連綁定的事件一起複製,則加個 true 參數 .clone(true)。