Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 99精品免费在线,国产精品1区2区3区在线播放,在线观看一区

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          碎片時間學編程「135]:在 JavaScript 中創建 HTML 元素


          avaScript 的Document.createElement()方法用于創建新的 HTML 元素。以下是實際效果:

          const root = document.body;
          
          const newElement = document.createElement('div');
          newElement.textContent = 'Hello World';
          
          root.append(newElement);

          如您所見,創建元素很容易。令人厭煩的部分是必須設置其所有屬性,然后將其添加到 DOM。更糟糕的是,創建具有相同屬性集的多個元素需要大量重復的代碼。

          幸運的是,我們可以將元素創建抽象為一個函數。實際上,我們可以使用對象將屬性傳遞給元素。使用Object.entries()我們可以迭代對象并設置屬性。看起來是這樣的:

          const root = document.body;
          
          const createElement = (el, parent, prepend = false) => {
            const { nodeName = 'div', ...attrs } = el;
            const element = document.createElement(nodeName);
            Object.entries(attrs).forEach(([attr, value]) => {
              element[attr] = value;
            });
            if (prepend) parent.prepend(element);
            else parent.append(element);
          };
          
          createElement(
            {
              nodeName: 'div',
              textContent: 'Hello world',
            },
            root
          );
          
          createElement(
            {
              nodeName: 'p',
              textContent: 'Hi',
            },
            root,
            true
          );
          
          

          這非常有用,但是如果我們想要創建一個元素的 HTML 字符串會發生什么呢?我們有一個createElement 片段,它可以按照這些思路做一些事情。唯一缺少的部分是將其附加到父元素。

          更多內容請訪問我的網站:https://www.icoderoad.com

          JavaScript 語句向瀏覽器發出的命令。語句的作用是告訴瀏覽器該做什么。

          JavaScript 語句

          JavaScript 語句是發給瀏覽器的命令。

          這些命令的作用是告訴瀏覽器要做的事情。

          下面的 JavaScript 語句向 id="demo" 的 HTML 元素輸出文本 "你好 Dolly" :

          實例

          document.getElementById("demo").innerHTML = "你好 Dolly";

          嘗試一下 ?

          分號 ;

          分號用于分隔 JavaScript 語句。

          通常我們在每條可執行的語句結尾添加分號。

          使用分號的另一用處是在一行中編寫多條語句。

          實例:

          a = 5;

          b = 6;

          c = a + b;

          以上實例也可以這么寫:

          a = 5; b = 6; c = a + b;

          嘗試一下 ?

          您也可能看到不帶有分號的案例。 在 JavaScript 中,用分號來結束語句是可選的。

          JavaScript 代碼

          JavaScript 代碼是 JavaScript 語句的序列。

          瀏覽器按照編寫順序依次執行每條語句。

          本例向網頁輸出一個標題和兩個段落:

          實例

          document.getElementById("demo").innerHTML="你好 Dolly";

          document.getElementById("myDIV").innerHTML="你最近怎么樣?";

          JavaScript 代碼塊

          JavaScript 可以分批地組合起來。

          代碼塊以左花括號開始,以右花括號結束。

          代碼塊的作用是一并地執行語句序列。

          本例向網頁輸出一個標題和兩個段落:

          實例

          function myFunction()

          {

          document.getElementById("demo").innerHTML="你好Dolly";

          document.getElementById("myDIV").innerHTML="你最近怎么樣?";

          }

          JavaScript 語句標識符

          JavaScript 語句通常以一個 語句標識符 為開始,并執行該語句。

          語句標識符是保留關鍵字不能作為變量名使用。

          下表列出了 JavaScript 語句標識符 (關鍵字) :

          <table class="reference" "style="width: 100%" style="border: 0px; margin: 4px 0px; padding: 0px; width: 729px; color: rgb(51, 51, 51); font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, STHeiti, 'Microsoft Yahei', sans-serif; font-size: 12px; line-height: normal; text-align: start; white-space: normal;">

          語句描述
          break用于跳出循環。
          catch語句塊,在 try 語句塊執行出錯時執行 catch 語句塊。
          continue跳過循環中的一個迭代。
          do ... while執行一個語句塊,在條件語句為 true 時繼續執行該語句塊。
          for在條件語句為 true 時,可以將代碼塊執行指定的次數。
          for ... in用于遍歷數組或者對象的屬性(對數組或者對象的屬性進行循環操作)。
          function定義一個函數
          if ... else用于基于不同的條件來執行不同的動作。
          return退出函數
          switch用于基于不同的條件來執行不同的動作。
          throw拋出(生成)錯誤 。
          try實現錯誤處理,與 catch 一同使用。
          var聲明一個變量。
          while當條件語句為 true 時,執行語句塊。

          JavaScript 對大小寫敏感。

          JavaScript 對大小寫是敏感的。

          當編寫 JavaScript 語句時,請留意是否關閉大小寫切換鍵。

          函數 getElementById 與 getElementbyID 是不同的。

          同樣,變量 myVariable 與 MyVariable 也是不同的。

          空格

          JavaScript 會忽略多余的空格。您可以向腳本添加空格,來提高其可讀性。下面的兩行代碼是等效的:

          var person="Hege";

          var person = "Hege";

          對代碼行進行折行

          您可以在文本字符串中使用反斜杠對代碼行進行換行。下面的例子會正確地顯示:

          document.write("你好 \

          世界!");

          不過,您不能像這樣折行:

          document.write \

          ("你好世界!");

          您知道嗎?

          提示:JavaScript 是腳本語言。瀏覽器會在讀取代碼時,逐行地執行腳本代碼。而對于傳統編程來說,會在執行前對所有代碼進行編譯。

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          、可維護性代碼

          通常說代碼可維護就意味著它具備以下的特點:

          1. 容易理解,無須求助原始開發者,任何人一看代碼就知道它是干什么的,以及它是怎么實現的;
          2. 符合常識,代碼中的一切都顯得順理成章,無論操作多么復雜;
          3. 容易適配,即使數據發生變化也不用完全重寫;
          4. 容易擴展,代碼架構經過認真設計,支持未來擴展核心功能;
          5. 容易調試,出問題時,代碼可以給出明確的信息,通過它能直接定位問題;

          二、編碼規范-可讀性

          要想讓代碼容易維護,首先必須使其可讀。代碼縮進是保證可讀性的重要基礎,如果所有人都是用相同的縮進,整個項目的代碼就會更容易讓人看懂。縮進通常使用空格數而不是tab鍵來定義,因為tab鍵在不同文本編譯器中的顯示不同,一般來說縮進是4個空格。

          可讀性的另一方面是代碼注釋。在大多數的編程語言中,廣泛接受的做法是為每個方法都編寫注釋。

          一般來說,以下地方應該寫注釋:

          1. 函數和方法,每個函數和方法都應該有注釋來描述其用途,以及完成任務所用的算法。同時,也寫清楚這個函數或方法的前提,每個參數的含義,以及函數是否返回值。
          2. 大型代碼塊,多行代碼但用于完成單一任務的,應該在前面給出注釋,把要完成的任務寫清楚。
          3. 復雜的算法,如果使用了獨特的方法解決問題,要通過注釋解釋明白。這樣不僅可以幫助別人查看代碼,也可以幫助自己今后查看代碼。
          4. 使用黑科技,一些特殊的方法,特定的假設。

          三、變量和函數命名

          代碼中變量和函數的適當命名對于其可讀性和可維護性至關重要。

          1. 變量名應該是名稱;
          2. 函數名應該以動詞開始;
          3. 變量、函數、方法都以小寫字母開頭,使用駝峰大小寫形式;
          4. 名稱要盡量用描述性和直觀的詞匯,但不要過于冗長;

          四、松散耦合

          只要應用程序的某個部分對另一部分依賴的過于緊密,代碼就會變得緊密耦合,因而難以維護。

          典型的問題是在一個對象中直接引用另一個對象,這樣,修改其中一個,可能必須還得修改另一個。緊密耦合的軟件難以維護,肯定需要頻繁的重寫。

          1、解耦HTML和JavaScript

          web開發中最常見的耦合是HTML和JavaScript,在網頁中,HTML和JavaScript分別代表不同層面的解決方案,HTML是數據,JavaScript是行為。這是因為它們之間要相互操作,需要通過不同的方式將這兩種技術聯系起來。可惜的是,其中一些方式會導致HTML與JavaScript緊密耦合。

          把JavaScript直接嵌入在HTML中,要么使用包含嵌入代碼的

          <!-- 使用<script>造成緊密耦合 -->

          <script>

          document.write("hello 哪吒編程");

          </script>


          <!-- 使用事件處理程序屬性造成緊密耦合 -->

          <input type="button" value="Click me" onclick="dosomething()"/>

          雖然技術上這樣做沒有問題,但實踐中,這樣會將表示數據的HTML與定義行為的JavaScript緊密耦合在一起,理想情況下,HTML和JavaScript應該完全分開,通過外部文件引入JavaScript,然后使用DOM添加行為。

          一般來說,應該避免在JavaScript中創建大量的HTML。同樣,這主要是為了做到數據層和行為層各司其職,在出錯時更容易定位問題所在。

          2、解耦CSS和JavaScript

          web應用程序的另一層是CSS,負責頁面樣式顯示、

          JavaScript和CSS緊密相關,都構建咋HTML之上,因此經常一起使用。

          CSS和JavaScript緊密相連的例子:

          element.style.color = "red";

          element.style.backgroundColor = "blue";

          3、解耦應用程序邏輯和事件處理程序

          每個web應用程序中都會有大量事件處理程序在監聽各種事件。可是,其中很少能做到應用程序邏輯與事件處理程序分離。

          以下是解耦應用程序邏輯和業務邏輯時應該注意的幾點:

          1. 不要把event對象傳給其他方法,而是只傳遞event對象中必要的數據;
          2. 應用程序中每個可能的操作都應該無須事件處理程序就可以執行;
          3. 事件處理程序應該處理事件,而把后續處理交給應用程序邏輯;

          做到以上幾點能夠給任何代碼的可維護性帶來巨大的提升,同時也能為將來的測試和開發提供很多可能性。

          五、編碼慣例

          1、尊重對象所有權

          2、不聲明全局變量

          最多可以創建一個全局變量,作為其他對象和函數的命名空間。

          3、不要比較null

          4、使用常量

          1. 重復出現的值
          2. 用戶界面字符串
          3. URL
          4. 任何可能變化的值

          六、作用域意識

          隨著作用域鏈中作用域數量的增加,訪問當前作用域鏈外部變量所需要的時間也會增加,訪問全局變量始終比訪問局部變量要慢,因為必須遍歷作用域鏈,任何可疑縮短遍歷作用域鏈時間的舉措都能提升代碼性能。

          1、避免全局查找

          改進代碼性能非常重要的一件事,可能就是要提防全局查找。全局變量和函數相比于局部變量始終是最費時間的,因為需要經歷作用域鏈查找。

          如果for循環中多次引用document,可以通過在局部作用域中保存document對象的引用,能夠明顯提升這個函數的性能,因為只需要作用域鏈查找。

          2、不適用with語句

          在性能很重要的代碼中,應避免使用with語句,與函數類似,with語句會創建自己的作用域,因此也會加長其中代碼的作用域鏈。在with語句中的diamagnetic一定比在它外部執行的代碼慢,因為作用域鏈查找時多一步。

          七、優化循環

          循環時編程中常用的語法構造,因此在JavaScript中十分常見,優化這些循環時性能優化的重要內容,因為循環會重復多次運行相同的代碼,所以運行時間會自動增加。

          1、簡化終止條件

          因為每次循環都會計算終止條件,所以它應該盡可能地快。

          2、簡化循環體

          循環體是最花時間的部分,因此要盡可能優化。要確保其中不包含可以輕松轉移到循環外部的密集計算。

          3、使用后測試循環

          最常見的循環時for和while循環,這兩種循環都屬于先測試循環。do-while就是后測試循環,避免了對終止條件初始化評估,因此會更快。

          4、展開循環

          如果循環的次數是有限的,那么通常拋棄循環而直接多次調用函數會更快。

          八、語句最少化

          JavaScript代碼語句的數量影響執行的速度。一條可以執行多個操作的語句,比多條語句中每個語句執行一個操作要快。那么優化的目標就是尋找可以合并的語句,以較少整個腳本的執行時間。

          1、多個變量聲明

          2、插入迭代性值

          任何時候只要使用迭代性值(遞增或者遞減),都要盡可能使用組合語句。

          比如

          let name = values[i++]

          替代

          let name = values[i];

          i++;

          3、使用數組和對象字面量

          九、優化DOM交互

          在所有JavaScript代碼中,涉及DOM的部分無疑是非常慢的。DOM操作和交互需要占用大量時間,因為經常需要重新渲染整個或部分頁面。此外,看起來簡單的操作也可能花費很長時間,因為DOM中攜帶著大量信息。理解如何優化DOM交互可以極大地提升腳本的執行速度。

          1、實時更新最小化

          訪問DOM時,只要訪問的部分是顯示頁面的一部分,就是在執行實時更新操作。之所以稱其為實時更新,是因為涉及立即更新頁面的顯示,讓用戶看到。每次這樣的更新,無論是插入一個字符還是刪除頁面上的一個內容,都會導致性能損失。這是因為瀏覽器需要為此重新計算數千項指標,之后才能執行更新。實時更新的次數越多,執行代碼所需的時間也越長。

          2、使用innerHTML

          在頁面中創建新DOM節點的方式有兩種,使用DOM方法如createElement()和appendChild(),以及使用innerHTML。對于少量DOM更新,兩種技術區別不大,但對于大量DOM更新,使用innerHTML要比使用標準DOM方法創建同樣的結構快得多。

          在給innerHTML賦值時,后臺會創建HTML解析器,然后使用原生DOM調用,而不是JavaScript的DOM方法來創建DOM結構,原生DOM方法速度更快,因為該方法時執行編譯代碼而非解釋代碼。

          3、使用委托事件

          大多數web應用程序會大量使用事件處理程序實現用戶交互。一個頁面中事件處理程序的數量與頁面響應用戶交互的速度有直接關系,為了減少對頁面響應的影響,應該盡可能使用事件委托。

          事件委托利用了事件的冒泡,任何冒泡的事件都可以不在事件目標上,而在目標的任何祖先元素上處理。基于這個認知,可以把事件處理程序添加到負責多個目標的高層元素上。只要可能,就應該在文檔級添加事件處理程序,因為在文檔級可以處理整個頁面的的事件。

          4、注意HTMLCollection

          由于web應用程序存在很大的性能問題,只要訪問HTMLCollection,無論是它的屬性還是方法,就會觸發查詢文檔,而這個查詢相當耗時,減少訪問HTMLCollection的次數可以極大地提升腳本的性能。

          可以優化HTMLCollection訪問最關鍵的地方就是循環。

          十、JavaScript思維導圖


          [機智]點擊獲取資料


          主站蜘蛛池模板: 人妻少妇精品视频三区二区一区| 黑人大战亚洲人精品一区| 久久久久女教师免费一区| 无码人妻久久久一区二区三区| 日韩成人一区ftp在线播放| 亚洲不卡av不卡一区二区| 波多野结衣在线观看一区| 日韩最新视频一区二区三| 国产在线精品一区免费香蕉 | 99精品一区二区三区| 国产成人精品一区在线 | 亚洲愉拍一区二区三区| 风间由美性色一区二区三区| 国产不卡视频一区二区三区| 国产成人一区二区三区免费视频| 国产高清在线精品一区| 精品国产一区二区三区色欲| 久久er99热精品一区二区| 午夜福利一区二区三区在线观看| 亚洲AV无码一区二区二三区软件| 成人无码一区二区三区| 伊人色综合一区二区三区| 中文字幕日本一区| 国产午夜精品一区二区三区嫩草| 久久影院亚洲一区| 久久婷婷久久一区二区三区| 亚洲乱色熟女一区二区三区丝袜 | 中文字幕色AV一区二区三区| 精品乱子伦一区二区三区| 国产一区二区精品尤物| 国产品无码一区二区三区在线蜜桃| 香蕉视频一区二区| 亚洲AV成人一区二区三区AV| 午夜影视日本亚洲欧洲精品一区| 日产亚洲一区二区三区| 亚洲中文字幕一区精品自拍| 免费一区二区无码视频在线播放| 一区二区三区久久精品| 人妻少妇AV无码一区二区| 亚洲AV午夜福利精品一区二区| 任你躁国语自产一区在|