天天看點

JavaScript使用事件onclick導緻css樣式失效問題問題:JavaScript使用事件onclick導緻css樣式失效推斷:結論:分析 :

問題:JavaScript使用事件onclick導緻css樣式失效

首先,我們用以下代碼得到的是一個樣式沒有失效的紅色"超連結",如下圖1

代碼1:

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        a{
            color: red;
        }
    </style>
</head>
<body>
<a herf="#">超連結</a>
</body>
</html>
           
JavaScript使用事件onclick導緻css樣式失效問題問題:JavaScript使用事件onclick導緻css樣式失效推斷:結論:分析 :

(圖1)

然後,發現用如下代碼時,(由圖2,圖3可知)按下按鈕以後,發現css代碼不起作用,樣式失效了

代碼2:

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        a {
            color: red;
        }
    </style>
    <script type="text/javascript">
        function test1() {
            document.write("aa")
        }
    </script>
</head>
<body>
<input type="button" onclick="test1()" value="按鈕"/>
<a herf="#">超連結</a>
</body>
</html>
           
JavaScript使用事件onclick導緻css樣式失效問題問題:JavaScript使用事件onclick導緻css樣式失效推斷:結論:分析 :
JavaScript使用事件onclick導緻css樣式失效問題問題:JavaScript使用事件onclick導緻css樣式失效推斷:結論:分析 :

裡面的css代碼已經不翼而飛

推斷:

1.使用onclick會導緻css樣式失效

2.用document的write方法會導緻樣式失效

顯然這些都是不成立的,是以去查閱資料得到如下結論

結論:

一個document對象一旦生成後,再次使用document.write的時候,document對象會先清空原本的所有标簽,然後再進行body上的内容。

分析 :

  • 沒按按鈕之前:代碼由上向下執行,遇到document.write的時候,document對象還沒完全生成(備注1),當執行完成後,我們用浏覽器看到生成後的頁面了,說明document對象已經生成了。
  • 按按鈕:我們再來點選按鈕,再次使用document,就會導緻document對象清空所有标簽,導緻樣式CSS失效。

(備注1:document對象還沒完全生成:因為下面還有代碼沒有執行,一個标簽對應一個對象,document是儲存了所有的标簽對象,代表所有HTML的資訊,沒有執行完代表資訊沒有完全錄入到document)

繼續閱讀