讀和寫一個元素的屬性
HTML元素最常用的部分就是它的屬性——它的id、class、href、title或者包含在HTML標籤中的其他資訊。JavaScript不經可以讀這些值,而且可以寫。
解決方法
讀寫元素的屬性有兩種方法,getAttribute允許你讀一個值的屬性,setAttribute則允許你可以寫。
看下麵的HTML:
我們可以這樣讀一個元素的屬性:
變數anchorId是“antares”,變數anchorTitle的值是“A far away place”。
要改變超連結的屬性,我們使用setAttribute,改變屬性的名稱以及我們希望改變的值:
變數newTitle的值將不再是“not that far away”。
討論
從自由的Netscape到現在嚴格界定的時代,DOM標準與HTML的接入改善了很多。其中一個最大的改善就是DOM和HTML屬性之間的映射。
當一個文檔解析成DOM格式後,元素就會增加特殊屬性節點。這些節點並不是那個元素的子元素:它們只有通過上述的兩種方法才可以接入。但是,做為原始DOM的始祖(稱為DOM 0,0的意思就是這些特徵都在標準化之前),目前的DOM規格包括專門針對HTML的很多功能。另外,屬性作為一個元素的特徵也是可以接近的。所以,一個超連結的href屬性通過link.getAttribute(“href”)以及link.href是可以接入的。
簡短語法不僅看起來更簡潔而且讀起來更方便:在有些情況,簡短也是有必要的。IE 6以及更低版本不允許通過setAttribute來對一個元素的顯示特徵進行更改。所以任何使用setAttribute對一個元素的class、id或者style進行的更改都不會顯示出來。為了讓你的改動生效,你必須通過元素節點的特殊屬性來進行設置。
讓事情更加混亂的是,不同流覽器閱讀某些特性是返回的不同的值,最明顯的就是Konqueror。如果某個屬性不存在Konqueror會返回null作為屬性特性,但是其他的流覽器返回的都是空字串。在某些情況下,有些流覽器會返回link.getAttribute(“href”)作為絕對URL(比如:"http://www.example.com/antares.html " ),而其他的會返回實際的屬性值(比如“antares.html”),在這種情況下,用dot屬性更加安全,因為它返回的都是絕對URL。
那麼,怎樣解決這些問題呢?
基本的原則就是:如果你確信一個屬性被規定了值,那你可以很安全的使用dot property方法,如果你不確定,你首先應該使用DOM的一個方法確定它是賦了值的,然後再用dot property方法來獲得它的值。
閱讀未經驗證的屬性,使用如下編碼:
這就確保屬性是存在的,而不是null。
寫未經驗證的屬性,使用如下的編碼:
這段編碼手下保證屬性被正確創建了,然後,它保證如果屬性影響了這個元素的顯示,對於IE不會有影響。
但是有幾個例外。這些必須的屬性中最突出的就是style和class,任何元素都會有這兩個值,因此,你可以立即將它們指定為dot properties(分別用element. style和element.className)。
Class是比較狡猾的兩個屬性之一,因為class是JavaScript本身包含的一個詞。作為專利,它被寫作element.className,但是使用getAttribute/setAttribute,我們寫element.getAttribute(“class”),但是不包括在Internet Explorer中,在IE中我們仍然使用element.getAttribute(“class Name”)。
我們需要小心的其他屬性就是一個label的for屬性。它遵循和class同樣的屬性,但是它的property form是htmlFor。使用getAttribute/setAttribute,我們寫element.getAttribute(“for”),但是在IE中,它是element.getAttribute(“htmlFor”)。
推薦給同仁
您想要瞭解更多的免費小竅門以便提升你的網站排名嗎?
請馬上聯繫我們網站管理員:
MSN: chenlinwu@cmmail.com
Email: info@rank-ad.com