<style id="ax2ay"></style>

<ol id="ax2ay"><var id="ax2ay"></var></ol>
    1. \n \n

      <\/p>\n<\/body>\n\n<\/html><\/pre>\n

      \n<\/p>如您所見,模板是單獨存儲的,並在需要時動態(tài)使用。此方法增加了重用模板的可能性。但是,使用內(nèi)聯(lián)腳本會將模板的作用域限制在一個頁面上。如果您有多個頁面,則必須再次定義模板。因此,包含外部文件中的模板將是理想的解決方案——就像 CSS 一樣。

      \n<\/strong>模板作為外部 HTML 片段<\/p>

      亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

      首頁 web前端 js教程 用Mustache.js創(chuàng)建HTML模板

      用Mustache.js創(chuàng)建HTML模板

      Feb 24, 2025 am 09:35 AM

      Creating HTML Templates with Mustache.js

      Web 應(yīng)用通常採用 MVC 架構(gòu),將業(yè)務(wù)邏輯與展現(xiàn)視圖分離。複雜的項目涉及大量客戶端 HTML 使用 JavaScript 操作,維護起來可能很困難。在這種情況下,我們可以使用模板系統(tǒng)來提高可重用性,並簡化視圖管理任務(wù)。 Mustache.js 提供了一個文檔完善的模板系統(tǒng),可用於管理模板。而且,由於 Mustache 支持多種語言,我們無需在服務(wù)器端使用單獨的模板系統(tǒng)。本文介紹了使用 Mustache 的基礎(chǔ)知識。

      關(guān)鍵要點

      • Mustache.js 是一個文檔完善的模板系統(tǒng),可用於管理複雜 Web 應(yīng)用中的 HTML 模板,提高可重用性並簡化視圖管理任務(wù)。
      • Mustache.js 是無邏輯的,這意味著其模板不包含任何 if-else 條件或 for 循環(huán)。它使用雙大括號表示的標(biāo)籤將數(shù)據(jù)添加到模板中。
      • Mustache 模板可以通過多種方式定義,包括內(nèi)聯(lián)方法、內(nèi)聯(lián)腳本和外部 HTML 片段。選擇哪種方法取決於項目的具體需求。
      • Mustache.js 是一款多功能工具,可在客戶端和服務(wù)器端使用,並支持多種語言。它還帶有用於管理複雜模板的標(biāo)籤,例如變量、節(jié)、函數(shù)和部分模板。

      為什麼我們需要模板系統(tǒng)?

      大多數(shù)不了解模板系統(tǒng)的開發(fā)者會創(chuàng)建新的 HTML 代碼塊,並使用 JavaScript 動態(tài)地將它們插入 DOM。一種常見的方法是將 HTML 元素指定為字符串,然後設(shè)置 innerHTML 屬性或調(diào)用 jQuery html() 方法。下面是一個示例:

      var dynamic_html = "<div>HighlightedAuthor</div>";
      
      document.getElementById("container").innerHTML = dynamic_html;</pre>
      

      另一種構(gòu)建 DOM 的方法是創(chuàng)建元素並分別追加它們,如下所示:

      var title = document.createElement('div');
      var highlight = document.createElement('span');
      var highlight_text = document.createTextNode("Highlight");
      var author = document.createElement('span');
      var author_text = document.createTextNode("Author");
      var container = document.getElementById('container');
      
      highlight.appendChild(highlight_text);
      title.appendChild(highlight);
      author.appendChild(author_text);
      title.appendChild(author);
      container.appendChild(title);</pre>
      

      以上兩種方法都可以有效地將元素動態(tài)添加到文檔中??紤]這樣一種情況:我們有一個設(shè)計精良的項目符號列表,需要在網(wǎng)站的三個不同類型的頁面中使用。使用這些技術(shù),我們將不得不在三個不同的位置重複列表的 HTML 代碼。這通常被認(rèn)為是不好的編碼習(xí)慣。在這種情況下,我們可以在不同位置使用預(yù)定義的模板,而無需重複代碼。 Mustache.js 是一個非常流行的 JavaScript 模板引擎。由於 Mustache 提供了多種語言的服務(wù)器端和客戶端模板,因此我們不必?fù)?dān)心選擇單獨的模板引擎。

      Mustache.js 入門

      Mustache 是一個開源的無邏輯模板系統(tǒng),適用於 JavaScript、Ruby、Python、PHP 和 Java 等語言。您可以訪問 GitHub 上的官方頁面獲取庫的副本。 Mustache 將模板和視圖作為創(chuàng)建動態(tài)模板的基礎(chǔ)。視圖包含要包含在模板中的 JSON 數(shù)據(jù)。模板包含帶有模板標(biāo)籤的展現(xiàn) HTML 或數(shù)據(jù),用於包含視圖數(shù)據(jù)。前面我們提到 Mustache 是無邏輯的。這意味著模板不包含任何 if-else 條件或 for 循環(huán)。現(xiàn)在,讓我們通過一個簡單的示例開始使用 Mustache 模板。

      var dynamic_html = "<div>HighlightedAuthor</div>";
      
      document.getElementById("container").innerHTML = dynamic_html;</pre>
      

      首先,我們需要在文檔中包含 mustache.js 文件。然後,我們可以開始創(chuàng)建 Mustache 模板。在上面的示例中,我們有一個視圖,其中包含一個人的姓名和職業(yè)。然後,我們在 render() 函數(shù)內(nèi)使用展現(xiàn)代碼和姓名和職業(yè)數(shù)據(jù)的標(biāo)籤。標(biāo)籤由圍繞它們的雙大括號或鬍鬚表示?,F(xiàn)在,讓我們看看 render() 方法是如何工作的。

      渲染 Mustache 模板

      以下代碼顯示了 mustache.js 文件中 render() 函數(shù)的實現(xiàn)??梢韵?render() 傳遞三個參數(shù)。前兩個參數(shù) template 和 view 是必需的。 partials 可以被認(rèn)為是動態(tài)模板,您可以將其註入到主模板中。在我們之前的示例中,我們將模板作為內(nèi)聯(lián)參數(shù)傳遞,將視圖作為第二個參數(shù)傳遞,並將結(jié)果賦值給輸出變量。

      var title = document.createElement('div');
      var highlight = document.createElement('span');
      var highlight_text = document.createTextNode("Highlight");
      var author = document.createElement('span');
      var author_text = document.createTextNode("Author");
      var container = document.getElementById('container');
      
      highlight.appendChild(highlight_text);
      title.appendChild(highlight);
      author.appendChild(author_text);
      title.appendChild(author);
      container.appendChild(title);</pre>
      

      這是使用 Mustache 進行模板化的最基本形式。讓我們看看其他可用於創(chuàng)建更規(guī)范代碼的方法。

      定義 Mustache 模板

      在您的應(yīng)用程序中定義 Mustache 模板有多種方法。這些方法類似於使用內(nèi)聯(lián)樣式、內(nèi)聯(lián)樣式表和外部樣式表包含 CSS。我們前面討論的示例可以被認(rèn)為是一種內(nèi)聯(lián)方法,因為我們直接將模板傳遞給函數(shù)。此方法阻止了可重用模板的可能性。讓我們看看如何將模板定義為內(nèi)聯(lián)腳本模板,而不是直接傳遞給函數(shù)。

      模板作為內(nèi)聯(lián)腳本

      我們可以在 </pre>

      您可以根據(jù)需要在文檔中包含任意數(shù)量的具有不同 ID 的模板。當(dāng)您要使用模板時,使用 innerHTML 獲取腳本標(biāo)籤內(nèi)的 HTML,並將其作為模板傳遞。我們的第一個示例將更改為以下代碼:
      <!DOCTYPE html>
      <html lang="en">
      <head>
        <title>Mustache.js Inline Method</title>
        <??>
      </head>
      <body>
        <??>
        <p id="person"></p>
      </body>
      <??>
      </html></pre>
      

      如您所見,模板是單獨存儲的,並在需要時動態(tài)使用。此方法增加了重用模板的可能性。但是,使用內(nèi)聯(lián)腳本會將模板的作用域限制在一個頁面上。如果您有多個頁面,則必須再次定義模板。因此,包含外部文件中的模板將是理想的解決方案——就像 CSS 一樣。

      模板作為外部 HTML 片段

      在此技術(shù)中,我們將使用 jQuery 來實現(xiàn)模板化。 jQuery 提供了一個名為 load() 的函數(shù),可用於獲取外部文檔的一部分。我們將使用此方法從外部模板文件動態(tài)加載模板。 load() 函數(shù)執(zhí)行腳本而不是返回它們,因此我們不能像在前面方法中那樣在腳本標(biāo)籤內(nèi)創(chuàng)建模板。以下示例顯示了我們將要使用的外部模板文件。

      var dynamic_html = "<div>HighlightedAuthor</div>";
      
      document.getElementById("container").innerHTML = dynamic_html;</pre>
      

      我們已對模板使用 <div> 元素而不是腳本,以使其與 jQuery 的 load() 函數(shù)兼容。這裡,我們有三個具有三個不同 ID 的不同模板。現(xiàn)在,讓我們繼續(xù)在您的頁面中使用這些模板。

      var title = document.createElement('div');
      var highlight = document.createElement('span');
      var highlight_text = document.createTextNode("Highlight");
      var author = document.createElement('span');
      var author_text = document.createTextNode("Author");
      var container = document.getElementById('container');
      
      highlight.appendChild(highlight_text);
      title.appendChild(highlight);
      author.appendChild(author_text);
      title.appendChild(author);
      container.appendChild(title);</pre>
      

      jQuery 將返回的文檔插入 HTML 元素中,而不是將其賦值給變量。因此,我們需要一個虛擬容器來保存模板。我已經(jīng)使用了默認(rèn)情況下隱藏的模板容器。上面的示例檢索 template1 並加載它。然後,我們可以從虛擬容器中獲取模板並將其傳遞給 Mustache 進行渲染。這就是外部方法的工作方式。我們還可以使用 AJAX 請求從服務(wù)器獲取數(shù)據(jù)。

      結(jié)論

      模板引擎和框架對於管理具有動態(tài)變化的展現(xiàn)視圖的複雜系統(tǒng)非常重要。 Mustache.js 是在客戶端管理模板的最佳選擇之一。我們在本教程的開頭解釋了為什麼模板很重要。然後,我們繼續(xù)介紹使用 Mustache 模板的各種技術(shù)?,F(xiàn)在,您將能夠選擇在項目中實現(xiàn) Mustache 模板的方法。我們已經(jīng)完成了探索使用 Mustache 模板的各種技術(shù),但是 Mustache 還帶有變量、節(jié)、函數(shù)和部分模板等標(biāo)籤,這些標(biāo)籤用於管理複雜的模板。討論每個標(biāo)籤的語法超出了本教程的範(fàn)圍。您可以在 Mustache GitHub 頁面上找到 Mustache 標(biāo)籤的綜合指南。隨意分享您以前使用 Mustache.js 的經(jīng)驗!

      Mustache.js 常見問題解答 (FAQ)

      • Mustache.js 與其他 JavaScript 模板庫的主要區(qū)別是什麼?

      Mustache.js 是一種無邏輯模板語法。這意味著它可以用於 HTML、配置文件、源代碼——任何內(nèi)容。它的工作原理是使用哈?;?qū)ο裰刑峁┑闹禂U展模板中的標(biāo)籤。與其他 JavaScript 模板庫不同,Mustache.js 不包含任何 if 語句、else 子句或 for 循環(huán)。相反,它只有標(biāo)籤。一些標(biāo)籤被替換為一個值,一些什麼也沒有,另一些則是一系列值。

      • 如何將 Mustache.js 用於 HTML 模板化?

      要將 Mustache.js 用於 HTML 模板化,您首先需要在 HTML 文件中包含 Mustache.js 腳本。然後,您在 <script></script> 標(biāo)籤內(nèi)定義一個模板。此模板可以包含要插入數(shù)據(jù)的佔位符。這些佔位符由雙大括號表示,例如 {{name}}。然後,您使用 Mustache.render() 函數(shù)使用您提供的數(shù)據(jù)呈現(xiàn)模板。

      • 我可以將 Mustache.js 與 Node.js 一起使用嗎?

      是的,您可以將 Mustache.js 與 Node.js 一起使用。為此,您需要使用 npm 安裝 mustache 包。安裝完成後,您可以在 Node.js 文件中需要它並使用它來呈現(xiàn)模板。

      • 如何使用 Mustache.js 遍歷數(shù)組?

      在 Mustache.js 中,您可以使用 {{#array}}…{{/array}} 語法遍歷數(shù)組。在此塊內(nèi),您可以使用 {{.}} 來引用數(shù)組中的當(dāng)前項。這允許您在模板中顯示數(shù)組中的每一項。

      • 如何在 Mustache.js 中使用條件語句?

      雖然 Mustache.js 是一個無邏輯模板庫,不支持傳統(tǒng)的 if 語句,但您仍然可以使用節(jié)來獲得類似的結(jié)果。節(jié)根據(jù)數(shù)據(jù)對像中鍵的值呈現(xiàn)文本塊一次或多次。

      • 如何在 Mustache.js 中包含部分模板?

      Mustache.js 中的部分模板允許您在一個較大的模板中包含較小的模板。這對於重用公共元素(如頁眉和頁腳)非常有用。要包含部分模板,您可以使用 {{>partial}} 語法。

      • 如何在 Mustache.js 中轉(zhuǎn)義 HTML?

      默認(rèn)情況下,Mustache.js 會轉(zhuǎn)義數(shù)據(jù)中的 HTML,以防止 XSS 攻擊。如果您想從數(shù)據(jù)中呈現(xiàn) HTML,可以使用三重大括號語法,例如 {{{html}}}。

      • 我可以將 Mustache.js 用於服務(wù)器端嗎?

      是的,您可以將 Mustache.js 用於服務(wù)器端。這對於在將模板發(fā)送到客戶端之前呈現(xiàn)它們非常有用,從而減少了需要在客戶端執(zhí)行的 JavaScript 量。

      • 如何在 Mustache.js 中預(yù)編譯模板?

      在 Mustache.js 中預(yù)編譯模板可以通過減少運行時需要完成的工作來提高性能。要預(yù)編譯模板,您可以使用 Mustache.parse() 函數(shù)。

      • 如何調(diào)試 Mustache.js 模板?

      調(diào)試 Mustache.js 模板可能很棘手,因為該庫沒有提供很多錯誤消息。但是,您可以使用 Mustache.parse() 函數(shù)檢查您的模板是否有效。此函數(shù)返回一個標(biāo)記數(shù)組,您可以檢查它以查看您的模板結(jié)構(gòu)是否正確。

      以上是用Mustache.js創(chuàng)建HTML模板的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

      本網(wǎng)站聲明
      本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

      熱AI工具

      Undress AI Tool

      Undress AI Tool

      免費脫衣圖片

      Undresser.AI Undress

      Undresser.AI Undress

      人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

      AI Clothes Remover

      AI Clothes Remover

      用於從照片中去除衣服的線上人工智慧工具。

      Clothoff.io

      Clothoff.io

      AI脫衣器

      Video Face Swap

      Video Face Swap

      使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

      熱工具

      記事本++7.3.1

      記事本++7.3.1

      好用且免費的程式碼編輯器

      SublimeText3漢化版

      SublimeText3漢化版

      中文版,非常好用

      禪工作室 13.0.1

      禪工作室 13.0.1

      強大的PHP整合開發(fā)環(huán)境

      Dreamweaver CS6

      Dreamweaver CS6

      視覺化網(wǎng)頁開發(fā)工具

      SublimeText3 Mac版

      SublimeText3 Mac版

      神級程式碼編輯軟體(SublimeText3)

      垃圾收集如何在JavaScript中起作用? 垃圾收集如何在JavaScript中起作用? Jul 04, 2025 am 12:42 AM

      JavaScript的垃圾回收機制通過標(biāo)記-清除算法自動管理內(nèi)存,以減少內(nèi)存洩漏風(fēng)險。引擎從根對像出發(fā)遍歷並標(biāo)記活躍對象,未被標(biāo)記的則被視為垃圾並被清除。例如,當(dāng)對像不再被引用(如將變量設(shè)為null),它將在下一輪迴收中被釋放。常見的內(nèi)存洩漏原因包括:①未清除的定時器或事件監(jiān)聽器;②閉包中對外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。 V8引擎通過分代回收、增量標(biāo)記、並行/並發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時間。開發(fā)時應(yīng)避免不必要的全局引用、及時解除對象關(guān)聯(lián),以提升性能與穩(wěn)定性。

      如何在node.js中提出HTTP請求? 如何在node.js中提出HTTP請求? Jul 13, 2025 am 02:18 AM

      在Node.js中發(fā)起HTTP請求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。 1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場景,但需手動處理數(shù)據(jù)拼接和錯誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請求;2.axios是基於Promise的第三方庫,語法簡潔且功能強大,支持async/await、自動JSON轉(zhuǎn)換、攔截器等,推薦用於簡化異步請求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基於Promise且語法簡單

      JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

      JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時復(fù)制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內(nèi)存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助於編寫更穩(wěn)定可靠的代碼。

      JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

      JavaScript開發(fā)者們,大家好!歡迎閱讀本週的JavaScript新聞!本週我們將重點關(guān)注:Oracle與Deno的商標(biāo)糾紛、新的JavaScript時間對象獲得瀏覽器支持、GoogleChrome的更新以及一些強大的開發(fā)者工具。讓我們開始吧! Oracle與Deno的商標(biāo)之爭Oracle試圖註冊“JavaScript”商標(biāo)的舉動引發(fā)爭議。 Node.js和Deno的創(chuàng)建者RyanDahl已提交請願書,要求取消該商標(biāo),他認(rèn)為JavaScript是一個開放標(biāo)準(zhǔn),不應(yīng)由Oracle

      React與Angular vs Vue:哪個JS框架最好? React與Angular vs Vue:哪個JS框架最好? Jul 05, 2025 am 02:24 AM

      選哪個JavaScript框架最好?答案是根據(jù)需求選擇最適合的。 1.React靈活自由,適合需要高度定制、團隊有架構(gòu)能力的中大型項目;2.Angular提供完整解決方案,適合企業(yè)級應(yīng)用和長期維護的大項目;3.Vue上手簡單,適合中小型項目或快速開發(fā)。此外,是否已有技術(shù)棧、團隊規(guī)模、項目生命週期及是否需要SSR也都是選擇框架的重要因素??傊?,沒有絕對最好的框架,適合自己需求的就是最佳選擇。

      立即在JavaScript中立即調(diào)用功能表達式(IIFE) 立即在JavaScript中立即調(diào)用功能表達式(IIFE) Jul 04, 2025 am 02:42 AM

      IIFE(ImmediatelyInvokedFunctionExpression)是一種在定義後立即執(zhí)行的函數(shù)表達式,用於變量隔離和避免污染全局作用域。它通過將函數(shù)包裹在括號中使其成為表達式,並緊隨其後的一對括號來調(diào)用,如(function(){/code/})();。其核心用途包括:1.避免變量衝突,防止多個腳本間的命名重複;2.創(chuàng)建私有作用域,使函數(shù)內(nèi)部變量不可見;3.模塊化代碼,便於初始化工作而不暴露過多變量。常見寫法包括帶參數(shù)傳遞的版本和ES6箭頭函數(shù)版本,但需注意:必須使用表達式、結(jié)

      處理諾言:鏈接,錯誤處理和承諾在JavaScript中 處理諾言:鏈接,錯誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

      Promise是JavaScript中處理異步操作的核心機制,理解鍊式調(diào)用、錯誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。 1.鍊式調(diào)用通過.then()返回新Promise實現(xiàn)異步流程串聯(lián),每個.then()接收上一步結(jié)果並可返回值或Promise;2.錯誤處理應(yīng)統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,並可在catch中返回默認(rèn)值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個完成即返回)和Promise.allSettled()(等待所有完成)

      什麼是緩存API?如何與服務(wù)人員使用? 什麼是緩存API?如何與服務(wù)人員使用? Jul 08, 2025 am 02:43 AM

      CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡(luò)請求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗。 1.它允許開發(fā)者手動存儲如腳本、樣式表、圖片等資源;2.可根據(jù)請求匹配緩存響應(yīng);3.支持刪除特定緩存或清空整個緩存;4.通過ServiceWorker監(jiān)聽fetch事件實現(xiàn)緩存優(yōu)先或網(wǎng)絡(luò)優(yōu)先等策略;5.常用於離線支持、加快重複訪問速度、預(yù)加載關(guān)鍵資源及後臺更新內(nèi)容;6.使用時需注意緩存版本控制、存儲限制及與HTTP緩存機制的區(qū)別。

      See all articles