大多數的JavaScript操做都須要先獲取頁面上的某個元素的引用(reference),好讓你來作些實質性的事情。傳統的JavaScript作法,是經過ID獲取Dom節點的:javascript
var myDiv = document.getElementById('myDiv');
這毫無問題,不過這樣單單返回一個對象(DOM節點),用起來並非太實用和方便。爲了要用那節點乾點事情,你還將要手工編寫很多的代碼;另外,對於不一樣類型瀏覽器之間的差別,要處理起來可真頭大了。php
進入Ext.element 對象。元素(element)的的確確是Ext的心臟地帶,--不管是訪問元素(elements)仍是完成一些其餘動做,都要涉及它。Element的 API是整個Ext庫的基礎,若是你時間很少,只是想了解Ext中的一兩個類的話,Element必定是首選!css
由ID獲取一個Ext Element 的相應代碼以下(首頁ExtStart.htm 包含一個ID爲「myDiv」的 div,而後,在ExtStart.js中加入下列語句): The corresponding code to get an Ext Element by ID looks like this (the starter page ExtStart.html contains a div with the id "myDiv," so go ahead and add this code to ExtStart.js):html
Ext.onReady(function() { var myDiv = Ext.get('myDiv');});
再回頭看看Element對象,發現什麼有趣的東東呢?java
這意味着你可用少許的代碼來作各類各樣的事情,這裏僅僅是一個簡單的例子(完整的列表在Element API 文檔中)。web
繼續在ExtStart.js中,在剛纔咱們獲取好myDiv的位置中加入:ajax
myDiv.highlight(); //黃色高亮顯示而後漸退 myDiv.addClass('red'); // 添加自定義CSS類 (在ExtStart.css定義) myDiv.center(); //在視圖中將元素居中 myDiv.setOpacity(.25); // 使元素半透明
一般狀況下,想獲取多個DOM的節點,難以依靠ID的方式來獲取。有可能由於沒設置ID,或者你不知道ID,又或者直接用ID方式引用有太多元素 了。這種狀況下,你就會不用ID來做爲獲取元素的依據,可能會用屬性(attribute)或CSS Classname代替。基於以上的緣由,Ext引入了一個異常強大的Dom Selector庫,叫作DomQuery。數組
DomQuery可 做爲單獨的庫使用,但經常使用於Ext,你能夠在上下文環境中(Context)獲取多個元素,而後經過Element接口調用。使人欣喜的 是,Element對象自己便有Element.selcect的方法來實現查詢,即內部調用DomQuery選取元素。這個簡單的例子 中,ExtStart.htm包含若干段落(<p>標籤),沒有一個是有ID的,而你想輕鬆地經過一次操做立刻獲取每一段,全體執行它們的動 做,能夠這樣作:瀏覽器
// 每段高亮顯示 Ext.select('p').highlight();
Element.select在這個例子中的方便性顯露無疑。它返回一個複合元素,能經過元素接口(Element interface)訪問每一個元素。這樣作的好處是可不用循環和不分別訪問每個元素。緩存
DomQuery的選取參數能夠是一段較長的數組,其中包括W3C CSS3 Dom選取器、基本XPatch、HTML屬性和更多,請參閱DomQuery API文檔以瞭解這功能強大的庫箇中細節。
到這範例爲止,咱們所寫的代碼都是放在onReady中,即當頁面加載後總會當即執行,功能較單一——這樣的話,你便知道,如何響應某個動做或事件 來執行你但願作的事情,作法是,先分配一個function,再定義一個event handler事件處理器來響應。咱們由這個簡單的範例開始,打開ExtStart.js,編輯下列的代碼:
Ext.onReady(function() { Ext.get('myButton').on('click', function(){ alert("你單擊了按鈕");});});
代碼依然會加載好頁面後執行,不太重要的區別是,包含alert()的function是已定義好的,但它不會當即地被執行,是分配到按鈕的單擊事 件中。用淺顯的文字解釋,就是:獲取ID爲'myDottom'元素的引用,監放任何發生這個元素上被單擊的狀況,並分配一個function,以準備任 何單擊元素的狀況。
通常來講,Element.select也能作一樣的事情,即做用在獲取一組元素上。下一例中,演示了頁面中的某一段落被單擊後,便有彈出窗口:
Ext.onReady(function() { Ext.select('p').on('click', function() { alert("你單擊了一段落;");});});
這兩個例子中,事件處理的function均是簡單幾句,沒有函數的名稱,這種類型函數稱爲「匿名函數(anonymous function)」,便是沒有名的的函數。你也能夠分配一個有名字的event handler,這對於代碼的重用或多個事件頗有用。下一例等效於上一例:
Ext.onReady(function() { var paragraphClicked = function() { alert("你單擊了一段落;");} Ext.select('p').on('click', paragraphClicked);});
到目前爲止,咱們已經知道如何執行某個動做。但當事件觸發時,咱們如何得知這個event handler執行時是做用在哪個特定的元素上呢?要明確這一點很是簡單,Element.on方法傳入到even handler的function中(咱們這裏先討論第一個參數,不過你應該瀏覽API文檔以瞭解even handler更多的細節)。在咱們以前的例子中,function是忽略這些參數的,到這裏可有少量的改變,——咱們在功能上提供了更深層次的控制。必 須先說明的是,這其實是Ext的事件對象(event object),一個跨瀏覽器和擁有更多控制的事件的對象。例如,能夠用下列的語句,獲得這個事件響應所在的DOM節點:
Ext.onReady(function() { var paragraphClicked = function(e) { Ext.get(e.target).highlight();} Ext.select('p').on('click', paragraphClicked);});
注意獲得的e.target是DOM節點,因此咱們首先將其轉換成爲EXT的Elemnet元素,而後執行欲完成的事件,這個例子中,咱們看見段落是高亮顯示的。