1. 程式人生 > >關於用JS改變樣式的個人理解

關於用JS改變樣式的個人理解

在慕課網學習JS入門篇4—1的時候產生的疑問: 4—1中,我們先是用<style>標籤定義了樣式,之後通過JS對樣式進行修改,最後用設定object.style=“none”的方式成功取消了修改,進行樣式的還原。疑問就是為什麼這個方式不會將原有的樣式也消除掉? 其實進入瀏覽器的除錯介面一看,就很容易理解這個問題。

首先這是用JS修改樣式前的效果和程式碼: 用JS修改樣式前 這是用JS修改樣式後的效果和程式碼: 用JS修改樣式後的效果和程式碼: 在我們使用JS呼叫了函式對樣式進行修改後,很明顯可以看到h2標籤和div標籤多了color這一行內樣式。所以,用JS改變樣式實際上是在行內新增style=“”以進行改變,由於行內樣式的優先順序要更高

,所以覆蓋了前面css定義的樣式。這樣一來,當我們使用了object.style=“none”後,實際上消除的也只是行內樣式,對style標籤裡定義的樣式沒有影響。

object.style=“none”是一個沒有意義的用法 在這裡插入圖片描述 可以設定style的display為none,但是直接設定style為none其實沒有實際意義。其實不管object.style=“none”的引號中是none還是其他東西,甚至是一個空的值,都是給物件賦予了一個空值或者說沒有實際意義的值,其效果是賦予元素(div或者h2)空的屬性,上圖中可以看出,只有一個style,後面沒有跟任何屬性。只是這種方法同樣會使得行內樣式失效,所以我們會覺得這種方法有效。 正確的做法應該是object.removeAttribute(“style”),也就是直接移除行內的style=“”這一整個屬性,使得定義樣式的途徑只有css。如下圖,這種方法將整個style屬性都去掉了,而不是單純去掉style的值。 在這裡插入圖片描述

總結: 1.不僅要知道怎麼解決問題,還要知道背後的原理,以及是否有更合適的解決方法 2.JS是即時反饋的,所以要善用網頁除錯解決問題,研究效果實現的原理,這個很重要。