在講解如何選取文檔元素之前,先普及一下什麼是文檔節點: HTML文檔的每個節點都表示一個Node對象,節點樹形結構的根部是Document節點,代表整個文檔,代表HTML元素的節點是Element節點,代表文本的節點是Text節點;Document、Element、Text類都是Node類的子類;( ...
在講解如何選取文檔元素之前,先普及一下什麼是文檔節點: HTML文檔的每個節點都表示一個Node對象,節點樹形結構的根部是Document節點,代表整個文檔,代表HTML元素的節點是Element節點,代表文本的節點是Text節點;Document、Element、Text類都是Node類的子類;(Comment節點類型代表註釋節點,Attr節點類型代表屬性) 查詢一個或多個文檔元素的方法: (文檔Document對象和元素Element對象均定義了以下方法,即也可以在一個元素Element上選擇它的子元素) 一、用指定的id屬性:document.getElementById('idName');方法返回實時的匹配指定ID屬性的元素節點。如果沒有發現匹配的節點,則返回null。 自定義一個工具函數同時選取多個元素: function getElements('id1','id2','id3',......){ var elements = {}; for(var i = 0,len = arguments.length;i<len;i++){ var id = arguments[i]; var elt = document.getElementById(id); if(elt == null){throw new Error('No element with id: '+id);} elements[id] = elt; } return elements; } 二、用指定的name屬性:getElementsByName('name');返回一個非實時的包含若幹Element對象的只讀類數組對象NodeList對象,它同時也匹配具有和name同名的id屬性的元素,所以不要將同一個字元串同時用於id屬性和name屬性; 雖然在用一個字元串給一個元素的id屬性或name屬性賦值時,這個字元串會自動的成為當前視窗對象的一個全局屬性,即可以直接通過該屬性名調用對應的元素,但最好顯示的調用getElementsByName()來選取他們,因為該變數在日後可能會失效(當給視窗對象定義同名屬性時) 三、用指定的標簽名:getElementsByTagName('tagname');同樣返回一個實時的NodeList對象,該類數組對象中的元素是按所有該標簽在文檔中出現的順序排序的,可通過索引來選取指定元素; 該方法不區分標簽的大小寫; 可使用'*'通配符來選取文檔的所有元素; 可在指定Element對象上調用該方法,來選取它的子元素; HTMLDocument類還指定了一些快捷屬性,如:images、forms、links、anchors、embeds、plugins、scripts等,他們都指定HTMLCollection對象,它也是一個類數組對象,可以這樣來選取他們的集合中的某一個元素document.forms['idname'];或document.images[0]; HTMLDocument類還指定body、head屬性,特指<body>和<head>元素,還有documentElement屬性指文檔的根元素<html> NodeList和HTMLCollection對象通常是實時的,即當文檔變化時它們所包含的元素列表能隨之改變;最好使用for迴圈來遍歷一個NodeList或HTMLCollection對象,而for..in迴圈會遍歷到他們的length屬性; 四、用指定的class屬性:getElementsByClassName();基於其class屬性值中的標識符來選取成組的文檔元素,他也返回一個實時的NodeList對象 五、用指定的CSS選擇器來匹配:(返回的是非實時的NodeList對象,相對其他方法較低效) querySelectorAll()根據一個包含CSS選擇器的字元串,返回一個表示當前文檔中匹配選擇器的所有元素的NodeList對象,但該NodeList對象不是實時的,它只包含調用時刻所匹配到的元素,並不更新後續文檔的變化,若找不到匹配則返回空的NodeList對象;可使用'*'通配符來選取文檔的所有元素 querySelector()只返回第一個匹配的元素對象(以文檔順序),若匹配不到則返回null querySelector()、querySelectorAll()在元素Element對象上也有定義,在元素上調用它們時,先仍然在整個文檔中匹配,然後再過濾出結果集以便它只包含該元素的後代元素; querySelector()、querySelectorAll()在大多情況下不匹配偽元素,如:first-line :first-letter :link :visited 六、elementFromPoint():方法返回位於頁面指定位置的元素。 var element = document.elementFromPoint(x, y); 上面代碼中,elementFromPoint方法的參數x和y,分別是相對於當前視窗左上角的橫坐標和縱坐標,單位是CSS像素。elementFromPoint方法返回位於這個位置的DOM元素,如果該元素不可返回(比如文本框的滾動條),則返回它的父元素(比如文本框)。如果坐標值無意義(比如負值),則返回null。