關(guān)于使用runtimeStyle屬性問(wèn)題討論文章
首先,runtimeStyle屬性不是必需的,它的存在甚至遠(yuǎn)沒(méi)有currentStyle有意義,因?yàn)橛捎贗E布局、呈現(xiàn)原理限制,style屬性里的定義,總有一些是無(wú)法和currentStyle同步的。什么意思呢?比如我們不設(shè)定TR元素的line-height或table-layout樣式屬性,我們是無(wú)法得到任意高度的表格行的,即使你費(fèi)勁寫(xiě)上100個(gè)style="height: 1px",也是沒(méi)有任何效果的。這時(shí)style的height雖然是1px,而currentStyle的height仍然是表格實(shí)際的高度。firefox不提供runtimeStyle和currentStyle,不知道它怎么解決這個(gè)不同步的問(wèn)題?是不是會(huì)反向同步不能表現(xiàn)的style屬性呢?
所以,runtimeStyle屬性說(shuō)白了就是用來(lái)錦上添花的,那么有沒(méi)有只有使用runtimeStyle才能完成的功能或效果呢?要說(shuō)有那也是自找的,比如本blog的Invert頁(yè)面顏色功能,這個(gè)還真的是只有使用runtimeStyle屬性才能做出來(lái)。除此之外,由于對(duì)runtimeStyle屬性的設(shè)置不用同步到style,也不會(huì)同步,所以使用runtimeStyle修改元素的樣式應(yīng)該有更高的效率。不過(guò)這個(gè)不同步同時(shí)帶來(lái)一個(gè)比較隱蔽的問(wèn)題,如果我們總是操作dom,使用runtimeStyle和currentStyle是沒(méi)有問(wèn)題的,可是如果我們?cè)趯?shí)現(xiàn)中又穿插使用DHTML特性,比如讀寫(xiě)innerHTML或讀取outerHTML屬性。這時(shí)不同步style的問(wèn)題就出來(lái)了,不小心遇上回郁悶個(gè)半死的,因?yàn)槌绦虿粫?huì)有任何的運(yùn)行錯(cuò)誤,就是不管怎么弄都沒(méi)有預(yù)期的效果。
總結(jié)一:runtimeStyle屬性一定要配對(duì)使用,即element.runtimeStyle.xxx = 'attribue';和element.runtimeStyle.xxx = '';配對(duì)。如果可以明確的寫(xiě)出element.style.xxx = 'attribue1';和element.style.xxx = 'attribue2';,那么就沒(méi)有什么必要使用runtimeStyle了。在同一個(gè)元素中混用style和runtimeStyle應(yīng)該是一定要禁止的,由于style和runtimeStyle覆蓋優(yōu)先級(jí)不同,如果混用稍有不慎就會(huì)出一些莫名奇妙的問(wèn)題,徒增debug的困擾和難度。
總結(jié)二:runtimeStyle屬性不要在有innerHTML和outerHTML操作的編程環(huán)境中使用,否則不小心就會(huì)郁悶個(gè)半死。因?yàn)閞untimeStyle的修改不會(huì)同步會(huì)html中的style里去,這個(gè)問(wèn)題就會(huì)類(lèi)似上面提到的同一元素中混用style和runtimeStyle的問(wèn)題。
當(dāng)然混用在首次實(shí)現(xiàn)的時(shí)候使用,程序員心里面其實(shí)是很清楚地,一般不會(huì)出什么大差錯(cuò),可是這樣的代碼會(huì)給后期的debug以及update埋下很?chē)?yán)重的錯(cuò)誤隱患。
相關(guān)文章
JavaScript如何將數(shù)據(jù)處理成樹(shù)形結(jié)構(gòu)
這篇文章主要介紹了JavaScript如何將數(shù)據(jù)處理成樹(shù)形結(jié)構(gòu)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Javascript新手入門(mén)之字符串拼接與變量的應(yīng)用
這篇文章主要給大家介紹了關(guān)于Javascript新手入門(mén)之字符串拼接與變量應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
用JavaScript對(duì)JSON進(jìn)行模式匹配(Part 1-設(shè)計(jì))
在《從 if else 到 switch case 再到抽象》這篇文章里面說(shuō)到,解決 if else 和 switch case 分支過(guò)多的一個(gè)方法,就是做一個(gè)專(zhuān)用的 dispatcher ,讓它來(lái)負(fù)責(zé)進(jìn)行篩選與轉(zhuǎn)發(fā)。2010-07-07
微信小程序里長(zhǎng)按識(shí)別二維碼的實(shí)現(xiàn)過(guò)程
這篇文章主要給大家介紹了關(guān)于微信小程序里長(zhǎng)按識(shí)別二維碼的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
java和javascript獲取word文檔的書(shū)簽位置對(duì)比
這篇文章主要介紹了java和javascript獲取word文檔的書(shū)簽位置代碼對(duì)比,需要的朋友可以參考下2014-06-06
詳解js創(chuàng)建對(duì)象的幾種方式和對(duì)象方法
這篇文章主要介紹了詳解js創(chuàng)建對(duì)象的幾種方式和對(duì)象方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
BootStrapTable服務(wù)器分頁(yè)實(shí)例解析
項(xiàng)目中經(jīng)常會(huì)使用到表格,數(shù)據(jù)量大的時(shí)候還需要進(jìn)行分頁(yè),項(xiàng)目設(shè)計(jì)階段,我選擇了bootstrapTable的js插件,個(gè)人覺(jué)得這個(gè)框架非常好用,支持服務(wù)器端分頁(yè),此篇主要寫(xiě)的主要是關(guān)于服務(wù)器分頁(yè),需要的朋友可以參考下2016-12-12
taro 實(shí)現(xiàn)購(gòu)物車(chē)邏輯的實(shí)例代碼
這篇文章主要介紹了taro 實(shí)現(xiàn)購(gòu)物車(chē)邏輯,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06

