上一篇講解dojo/dom-attr的文章中我們知道在某些情況下,attr子產品中會交給prop子產品來處理。比如:
textcontent、innerhtml、classname、htmlfor、value
disabled、checked等無狀态特性對應于屬性中的布爾變量
事件的處理
那這一節,我們便來看看prop對于屬性的處理。
首先是一個标準名稱字典,将要設定的屬性名重新命名,避免與保留字的沖突:
相比dom-attr來說,dom-prop子產品隻有兩個公共函數:prop.get與prop.set
prop.get方法的函數簽名為:
除了textcontent屬性外,其他直接以方括号文法從node中取值:node[prop];對于textcontent屬性,如果元素不支援textcontent,便以深度優先算法去擷取元素下所有文本節點的nodevalue:
因為innertext并不是标準屬性,是以這裡棄之不用;以下便是get方法的源碼:
prop.set方法的函數簽名為:
在attr.set方法中,很多情況都交給prop來處理,下面我們就要看看prop中set方法的實作。
set方法用來為元素的屬性指派,在實際應用中需要處理以下幾種情況:
參數分解,如果一次設定多個屬性,為每個屬性分别設定
如果someattr是“style”,則交給dom-style子產品處理
如果someattr是innerhtml,因為有的元素(tbody、thead、tfoot、tr、td、th、caption、colgroup、col)不支援innerhtml屬性,是以需要曲線救國,這裡首先将元素的子節點清除掉,然後利用dom-construct的todom方法,将html片段轉化成dom節點,作為子節點插入元素中
如果someattr是textcontent,同樣因為有的浏覽器并不支援該屬性,曲線救國的方式是先清除元素的子節點,然後建立文本節點作為子節點插入元素中
如果value是function,則看做添加事件;對于event的處理最好不要使用prop子產品還是推薦使用on子產品來綁定事件
如果您覺得這篇文章對您有幫助,請不吝點選右下方“推薦”,謝謝~