30天學會 MooTools 教學(6): 操縱HTML DOM元素
我們已經學習過如何來選取DOM元素,怎麼創建數組,怎麼創建函數,怎麼把事件添加到元素,今天我們來深入地學習一下如果操縱HTML元素。通過 MooTools 1.2,你可以添加新元素到一個HTML頁面中,也可以刪除元素,以及改變任何樣式或者元素參數,這些都非常容易。
基本方法
.get();
這個工具可以讓你獲取元素的屬性(property)。元素的屬性是組成一個HTML元素的各種不同部分,例如src、value、name等等。使用.get();方法非常簡單:
// 下面這行將返回id為「id_name」的元素的html標記名(div、a、span……)
$('id_name').get('tag');
<div id="body_wrap">
<span id="id_name">Element</span> <!-- 上面的代碼將返回「span」 -->
</div>
你可以使用.get();方法獲得更多屬性,而不只是html標記名:
- id
- name
- value
- href
- src
- class(如果有多個CSS類名,則將返回全部CSS類名)
- text (一個元素的文本內容)
- 等等…
.set();
.set();方法和.get();方法一樣,不過不是獲得一個值,而是設置一個值。當和事件聯合使用時比較有用,通過這個方法你可以在頁面加載之後改變一些屬性值。
// 這將設置id為id_name的元素鏈接地址為「http://www.google.com」
$('id_name').set('href', 'http://www.google.com');
<div id="body_wrap">
<!-- 上面的代碼將改變鏈接地址為「http://www.google.com」 -->
<a id="id_name" href="http://www.yahoo.com">Search Engine</a>
</div>
.erase();
通過.erase();方法,你可以清除一個元素的屬性值。它和前面兩個方法類似。選取元素,然後選擇你要清除的屬性。
// 這講移除id為id_name的元素的href屬性
$('id_name').erase('href');
<div id="body_wrap">
<!-- 上面的代碼將清除鏈接地址 -->
<a href="http://www.yahoo.com">Search Engine</a>
</div>
移動元素
.inject();
要移動頁面上一個已經存在的元素,你可以使用.inject();方法。和我們看到的其它方法類似,它用起來也非常簡單,可以在你的用戶界面上給你更多操控權。要使用.inject();方法,首先要設置一些包含元素變量:
var elementA = $('elemA');
var elementB = $('elemB');
var elementC = $('elemC');
上面的代碼把下面這個HTML分別賦值給了不同的變量,這樣用MooTools來操作時會比較簡單。
<div id="body_wrap">
<div id="elemA">A</div>
<div id="elemB">B</div>
<div id="elemC">C</div>
</div>
現在,要改變這些元素的順序,我們可以通過四種方式來使用.inject();方法。我們可以把元素注入到:
- 底部(bottom,默認)
- 頂部(top)
- 在某個元素的前面(before)
- 在某個元素的後面(after)
bottom和top將把這個元素注入到一個選中元素的內部,在元素內最底部或者最頂部。相對地,before和after將把一個元素注入到另外一個元素的頂部或者底部,但是不是注入到元素內部。
因此,讓我們把元素順序改變為A-C-B。由於我們不需要把一個元素注入到另外一個元素的內部,我們可以使用before或者after。
// 下面這句的意思是:把元素C放到元素B之前
elementC.inject(elementB, 'before');
// 下面這句的意思是:把元素B放到元素C之後
elementB.inject(elementC, 'after');
創建一個新元素
new Element
你可以使用「new Element」構造器來創建一個行的HTML元素。這和寫一個正常的HTML元素非常類似,只不過你需要調整一下語法,以便能夠在MooTools下正常運行:
// 首先命名一個變量並聲明一個「new Element」
// 然後定義元素的類型(div、a、span...)
var newElementVar = new Element('div', {
// 在這裡設置元素的所有屬性
'id': 'id_name',
'text': 'I am a new div',
'styles': {
// 在這裡設置元素的所有樣式參數
'width': '200px',
'height': '200px',
'background-color': '#eee',
'float': 'left'
}
});
現在你就有一個元素了,你可以通過我們剛才學的inject();方法把這個元素放在頁面上的某個位置。我們從下面這個簡單的HTML開始:
<div id="body_wrap">
<div id="content_id">Some div content</div>
</div>
現在,我們把ID為content_id的元素轉換為一個變量:
var bodyWrapVar = $('body_wrap');
和我們剛才學的一樣,我們可以把我們創建的這個元素注入到當前的HTML中:
// 這句的意思是說:「把newElementVar注入到bodyWrapVar內部,並放置到頂部」
newElementVar.inject(bodyWrapVar , 'top');
這個代碼最終可能是這樣的:
<div id="body_wrap">
<!-- 這個元素被注入到內部頂部 -->
<div id="id_name">I am a new div</div>
<div id="content_id">Some div content</div>
</div>
示例
為了這個例子,我們來創建一個表單,可以讓你添加一個行元素到你的HTML頁面。首先,建立一些文本框和按鈕。
<div id="body_wrap">
ID: <input id="id_input" name="id" />
text: <input id="text_input" name="text" />
<button id="new_div">創建一個新的div</button>
</div>
現在,我們來用MooTools寫JavaScript來實現讓這個HTML表單可以插入一個新的元素到你的頁面中。首先,我們先給這個按鈕添加一個事件,並寫一個函數來包含我們的代碼:
var newDiv = function() {
// 我們將把「添加一個新元素」的代碼放在這裡
};
window.addEvent('domready', function() {
$('new_div').addEvent('click', newDiv);
});
下一件事我們要做的就是指定我們要處理的變量。要使用輸入表單中的數據,我們需要使用.get();方法:
var idValue = $('id_input').get('value');
var textValue = $('text_input').get('value');
現在,上面代碼中的變量idValue和textValue就包含了它們指定的輸入表單的值。由於我們需要在用戶點擊「創建一個新的div」按鈕時 獲得輸入框的值,我們需要把上面的代碼放在newDiv();這個函數中。如果我們需要在這個函數外面獲得這個值,我們需要在頁面加載時獲得,而不是點擊 時。
var newDiv = function() {
var idValue = $('id_input').get('value');
var textValue = $('text_input').get('value');
};
window.addEvent('domready', function() {
$('new_div').addEvent('click', newDiv);
});
接下里,我們需要獲得我們新元素要插入到的元素:
var newDiv = function() {
var idValue = $('id_input').get('value');
var textValue = $('text_input').get('value');
var bodyWrapVar = $('newElementContainer');
};
window.addEvent('domready', function() {
$('new_div').addEvent('click', newDiv);
});
我們已經有了我們的輸入表單的值了,現在我們可以創建一個新元素了:
var newDiv = function() {
var idValue = $('id_input').get('value');
var textValue = $('text_input').get('value');
var bodyWrapVar = $('newElementContainer');
var newElementVar = new Element('div', {
// 這將設置這個元素的id為idValue的值
'id': idValue,
// 這將設置這個元素的文本為textValue的值
'html': textValue
});
};
window.addEvent('domready', function() {
$('new_div').addEvent('click', newDiv);
});
剩下我們要做的就是把這個新元素插入到我們的頁面中了:
var newDiv = function() {
var bodyWrapVar = $('newElementContainer');
var idValue = $('id_input').get('value');
var textValue = $('text_input').get('value');
var newElementVar = new Element('div', {
'id': idValue,
'text': textValue
});
// 下面這句是說:「把newElementVar插入到bodyWrapVar的內部頂部」
newElementVar.inject(bodyWrapVar, 'top');
};
var removeDiv = function() {
// 這將刪除內部的html值(就是div標記類的所有東西)
$('newElementContainer').erase('html');
}
window.addEvent('domready', function() {
$('new_div').addEvent('click', newDiv);
$('remove_div').addEvent('click', removeDiv);
});
更多學習...
一定要花一些時間看一些MooTools文檔中的Elements這一節:
Element這一節包含了我們這裡講到的大多數內容,還有很多其它內容
Element.style可以給你在元素樣式屬性上更多的控制權(有些東西我們將在以後的教程中深入講解)
Element.dimentions包含了處理位置、坐標、尺寸大小等東西的工具
Mootools 教學列表:
- 30天學會 MooTools 教學(1): 認識MooTools
- 30天學會 MooTools 教學(2): DOM選擇器
- 30天學會 MooTools 教學(3): 數組管理DOM元素
- 30天學會 MooTools 教學(4): 函數和MooTools
- 30天學會 MooTools 教學(5): 事件處理
- 30天學會 MooTools 教學(6): 操縱HTML DOM元素
- 30天學會 MooTools 教學(7): 設置和獲取樣式表屬性
- 30天學會 MooTools 教學(8): 輸入過濾-數字
- 30天學會 MooTools 教學(9): 輸入過濾-字符串
- 30天學會 MooTools 教學(10): Fx.Tween漸變
- 30天學會 MooTools 教學(11): Fx.Morph、Fx選項和Fx事件
- 30天學會 MooTools 教學(12): Drag.Move來實現拖放
- 30天學會 MooTools 教學(13): 正規表示式
- 30天學會 MooTools 教學(14): 定時器和Hash對象
- 30天學會 MooTools 教學(15): 滾動條(Slider)
- 30天學會 MooTools 教學(16): 排序類和方法簡介
- 30天學會 MooTools 教學(17): 手風琴(Accordion)教程
- 30天學會 MooTools 教學(18): Class 類(第一部分)
- 30天學會 MooTools 教學(19): 工具提示 Tooltips
- 30天學會 MooTools 教學(20): Tab 標籤頁
- 30天學會 MooTools 教學(21): Class 類(第二部分)
- 30天學會 MooTools 教學(22): 通過Fx.Elements同時處理多個形變動畫
- 30天學會 MooTools 教學(23): 滑動效果(Slide)
- 超過 50 個國外 Mootools 教學大集合