在JavaScript裡嵌入大量字串常量的方法

來源:互聯網
上載者:User

  在JavaScript檔案裡嵌入大量字串常量是經常遇到的事。有時為了省事,就把一些介面的HTML和CSS直接寫在JS檔案裡。數量少還好,多的話就密密麻麻的一坨文字,講究美觀的文藝青年們,會用大量的字元串連符號甚至加上縮排,強制換成好幾行。例如:

var html =    '<div>' +        '<p>Hello</p>' +        '<p>World'</p>' +    '</div>';

  這還好,要是字串裡有不少雙引號單引號,那就更麻煩了,各種逸出字元看的眼花繚亂。

  其實有個不怎麼起眼的小技巧,就能解決這個問題。大家總認為字串必須在"..."或'...'裡面,這點沒錯。但還有一個地方的字串也能當非代碼語義儲存下來,那就是一個function的toString,把整個函數的代碼當字串輸出——其中的注釋部分當然也是保留的!

  所以我們寫個空函數,裡面就一個/**/注釋,其中就是我們想要的常量內容。toString後加一個正則就可以提取我們想要的!

  馬上試試:

var RES_CODE = _TEXT(function(){/*    #include <iostream>    int main()    {        std::cout << "Hello world" << std::endl;        return 0;    }*/});var RES_POEM = _TEXT(function(){/*  更吹落,星如雨。  寶馬雕車香滿路。  鳳簫聲動,玉壺光轉,一夜魚龍舞。  蛾兒雪柳黃金縷,  笑語盈盈暗香去。   眾裡尋他千百度,   驀然回首,那人卻在燈火闌珊處。*/});var RES_XML = _TEXT(function(){/*    <projectDescription>        <name>Hello</name>        <comment></comment>        <projects>        </projects>        <buildSpec>            <buildCommand>                <name>com.adobe.flexbuilder.project.flexbuilder</name>                <arguments>                </arguments>            </buildCommand>            <buildCommand>                <name>com.adobe.flexbuilder.project.apollobuilder</name>                <arguments>                </arguments>            </buildCommand>        </buildSpec>    </projectDescription>*/});function _TEXT(wrap) {    return wrap.toString().match(/\/\*\s([\s\S]*)\s\*\//)[1];}alert(RES_CODE);alert(RES_POEM);alert(RES_XML);

  OK!就是Chrome裡把注釋每行前面的Tab去掉了,如果僅僅是放代碼的話問題也不大~ 當然有個前提是字元裡不能出現*/

  嘗試下看看: http://www.etherdream.com/funnyscript/js_multiline_const_string.html

  值得注意的是,壓縮代碼的時會過濾注釋,需要手動排除一部分。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.