[jQuery] Dom 元素 操作
CMS系統(drupal,joomla,wordpress…)在網站開發上,與傳統的開發上有著極大的差異,html架構並不是單純就前端這邊來刻出自己想要的html架構,絕大部分是由後端php產生出來的!
如果你剛好跟小弟一樣!是從CMS開始進入到網頁前端(web frontend)這個大家庭,那你一定要參考這篇文章,可以讓你不會像過去的我走上許多 CSS 亂拼亂湊的冤妄路!!
jQuery
再開始說明之前,你必須要先知道jQuery(一套跨瀏覽器的JavaScript函式庫,簡化HTML與JavaScript之間的操作)他是此篇文章的主角和關鍵!
另外假設你與我當時一樣對jQuery與javascript完全無知卻想立刻得到成果的門外漢也可以繼續往下看!可以從下面簡單且實用的jQuery對html物件操作的應用!來慢慢深入 jQuery 與 javascript 相信會對你前台開發上會有不錯的幫助!
正篇開始~
以此架構為例:
<div class="content">
<div class="item1 inner">
<p>Hello1</p>
<p>Hello2</p>
</div>
<div class="item2 inner">
<p>Goodbye1</p>
<p>Goodbye1</p>
</div>
</div>
1.加入自己想要的html元素:
.append():加入於指定 元素內的最後一個 項目
語法:
$('指定元素Id或class').append('想加入的html架構');
範例:
$('.content').append('<p>jquery產生元素</p>');
Demo:
<div class="content">
<div class="item1 inner">
<p>Hello1</p>
<p>Hello2</p>
</div>
<div class="item2 inner">
<p>Goodbye1</p>
<p>Goodbye1</p>
</div>
<p>jquery產生元素</p>
</div>
.prepend():加入於指定元素內的第一個項目
語法:
$('指定元素Id或class').prepend('想加入的html架構');
範例:
$('.content').prepend('<p>jquery產生元素</p>');
Demo:
<div class="content">
<p>jquery產生元素</p>
<div class="item1 inner">
<p>Hello1</p>
<p>Hello2</p>
</div>
<div class="item2 inner">
<p>Goodbye1</p>
<p>Goodbye1</p>
</div>
</div>
.before():於指定元素同層級的上方加入html元素
語法:
$('指定元素Id或class').before('想加入的html架構');
範例:
$('.item2').before('<p>jquery產生元素</p>');
Demo:
<div class="content">
<div class="item1 inner">
<p>Hello1</p>
<p>Hello2</p>
</div>
<p>jquery產生元素</p>
<div class="item2 inner">
<p>Goodbye1</p>
<p>Goodbye1</p>
</div>
</div>
.after():於指定元素同層級的下方加入html元素
語法:
$('指定元素Id或class').after('想加入的html架構');
範例:
$('.item2').after('<p>jquery產生元素</p>');
Demo:
<div class="content">
<div class="item1 inner">
<p>Hello1</p>
<p>Hello2</p>
</div>
<div class="item2 inner">
<p>Goodbye1</p>
<p>Goodbye1</p>
</div>
<p>jquery產生元素</p>
</div>
2.移動html元素到指定的位置:
其實這部分與剛說的加入自己想要的html元素做法與函數是完全一樣的,唯一的差別只有把想要加入的html參數,改為jquery選擇自己想搬移的元素
.append():將想移動html元素移動於指定元素內的最後一個項目
語法:
$('指定元素Id或class').append($('想要搬移的元素Id或class'));
範例:
$('.item2').append($('.item1 p'));
Demo:
<div class="content">
<div class="item1 inner"></div>
<div class="item2 inner">
<p>Goodbye1</p>
<p>Goodbye1</p>
<p>Hello1</p>
<p>Hello2</p>
</div>
</div>
.prepend():將想移動html元素移動於指定元素內的第一個項目
語法:
$('指定元素Id或class').prepend($('想要搬移的元素Id或class'));
範例:
$('.item2').prepend($('.item1 p'));
Demo:
<div class="content">
<div class="item1 inner"></div>
<div class="item2 inner">
<p>Hello1</p>
<p>Hello2</p>
<p>Goodbye1</p>
<p>Goodbye1</p>
</div>
</div>
.before():指定要移動的html元素於指定元素同層級的上方
語法:
$('指定元素Id或class').before($('想要搬移的元素Id或class'));
範例:
$('.item1').before($('.item2 p'));
Demo:
<div class="content">
<p>Goodbye1</p>
<p>Goodbye1</p>
<div class="item1 inner">
<p>Hello1</p>
<p>Hello2</p>
</div>
<div class="item2 inner"></div>
</div>
.after():指定要移動的html元素於指定元素同層級的下方
語法:
$('指定元素Id或class').after($('想要搬移的元素Id或class'));
範例:
$('.item1').after($('.item2 p'));
Demo:
<div class="content">
<div class="item1 inner">
<p>Hello1</p>
<p>Hello2</p>
</div>
<p>Goodbye1</p>
<p>Goodbye1</p>
<div class="item2 inner"></div>
</div>
~~~~
***
### 3.加入wrapper
wrapper在前台開發上,我只能說它佔了非常重要的角色,適當的 wrapper 能使我們前台 CSS 更加的整潔與完整!能大幅減少在前台上亂拚亂湊的可能性,這就需要慢慢體會了
***
### [.wrap()](http://api.jquery.com/wrap/):針對指定的html元素前後加上對應的html標籤**(個別加)**
語法:
```{.javascript}
$('指定元素Id或class').wrap('互相相對的html標籤');
範例:
$('.item1 p').wrap('<div class ="front-wrapper"></div>');
Demo:
<div class="content">
<div class="item1 inner">
<div class ="front-wrapper"><p>Hello1</p></div>
<div class ="front-wrapper"><p>Hello2</p></div>
</div>
<div class="item2 inner">
<p>Goodbye1</p>
<p>Goodbye1</p>
</div>
</div>
.wrapAll():對指定的html元素前後加上對應的html標籤(針對多個元素一次加入)
語法:
$('指定元素Id或class').wraAll('互相相對的html標籤');
範例1:
$('.item1 p').wrapAll('<div class ="front-wrapper"></div>');
Demo:
<div class="content">
<div class="item1 inner">
<div class ="front-wrapper">
<p>Hello1</p>
<p>Hello2</p>
</div>
</div>
<div class="item2 inner">
<p>Goodbye1</p>
<p>Goodbye1</p>
</div>
</div>
範例2:
$('.item1,item2').wrapAll('<div class ="wrapper"></div>');
Demo:
<div class="content">
<div class ="wrapper">
<div class="item1 inner">
<p>Hello1</p>
<p>Hello2</p>
</div>
<div class="item2 inner">
<p>Goodbye1</p>
<p>Goodbye1</p>
</div>
</div>
</div>
.wrapInner():對指定的html元素的下一層的所有元素進行wrapper,前後加上對應的html標籤
語法:
$('指定元素Id或class').wrapInner('互相相對的html標籤');
範例:
$('.item1 p').wrapInner('<div class ="front-wrapper"></div>');
Demo:
<div class="content">
<div class="item1 inner">
<div class ="front-wrapper">
<p>Hello1</p>
<p>Hello2</p>
</div>
</div>
<div class="item2 inner">
<p>Goodbye1</p>
<p>Goodbye1</p>
</div>
</div>
結語
以上的方法已經足夠你在 CMS 上產生你在開發前端中想要的 html 物件或是架構,可以讓你在撰寫樣式時更加的輕鬆!可以讓自己在架構上感到唯我獨尊的成就,不過我後面要補充下:你用來操作html元素的這些jquery方法,在CMS中大致上的情境都是會等到後台php跑完後才會執行,所以可能會在網站loading時,畫面會有瞬間的跑版的情況發生,所以如何使用這些工具還是得要自己拿捏!! 前後端完整的配合,架構上的物件能在後端就完整呈現才是上策XD
ps:如內容有誤!或有相關的疑問! 歡迎指正與討論
感謝大大們收看