119

JavaScript のヒアドキュメントのようなものが必要です。これについて何かアイデアはありますか?クロスブラウザ機能が必要です。

私はこれを見つけました:

heredoc = '\
<div>\
    <ul>\
        <li><a href="#zzz">zzz</a></li>\
    </ul>\
</div>';

私はそれが私のために働くと思います。:)

4

14 に答える 14

65

いいえ、残念ながら JavaScript はヒアドキュメントのようなものをサポートしていません。

于 2010-12-07T12:16:14.600 に答える
39

これはどう:

function MyHereDoc(){
/*HERE
<div>
   <p>
      This is written in the HEREDOC, notice the multilines :D.
   </p>
   <p>
      HERE
   </p>
   <p>
      And Here
   </p>
</div>
HERE*/
    var here = "HERE";
    var reobj = new RegExp("/\\*"+here+"\\n[\\s\\S]*?\\n"+here+"\\*/", "m");
    str = reobj.exec(MyHereDoc).toString();
    str = str.replace(new RegExp("/\\*"+here+"\\n",'m'),'').toString();
    return str.replace(new RegExp("\\n"+here+"\\*/",'m'),'').toString();
}

//Usage 
document.write(MyHereDoc());

「/*HERE」と「HERE*/」を任意の単語に置き換えるだけです。

于 2013-01-19T16:19:07.847 に答える
34

Zv_oDD の回答に基づいて、再利用しやすいように同様の関数を作成しました。

警告:これは多くの JS インタープリターの非標準機能であり、おそらくいつか削除されるでしょうが、Chrome でのみ使用するスクリプトを作成しているので、使用しています! クライアント向けの Web サイトでは、これに頼らないでください。

// Multiline Function String - Nate Ferrero - Public Domain
function heredoc(fn) {
  return fn.toString().match(/\/\*\s*([\s\S]*?)\s*\*\//m)[1];
};

使用する:

var txt = heredoc(function () {/*
A test of horrible
Multi-line strings!
*/});

戻り値:

"A test of horrible
Multi-line strings!"

ノート:

  1. テキストは両端でトリミングされるため、両端の余分な空白は問題ありません。

編集:

2014 年 2 月 2 日 - Function プロトタイプをまったく混乱させず、代わりにヒアドキュメントという名前を使用するように変更しました。

2017 年 5 月 26 日 - 最新のコーディング標準を反映するように空白を更新しました。

于 2013-01-24T08:09:42.417 に答える
19

実行している JS/JS エンジンのフレーバー (SpiderMonkey、AS3) に応じて、インライン XML を簡単に記述できます。この XML には、ヒアドキュメントのように複数行にテキストを配置できます。

var xml = <xml>
    Here 
    is 
    some 
    multiline 
    text!
</xml>

console.log(xml.toXMLString())
console.log(xml.toString()) // just gets the content
于 2012-02-23T00:29:02.610 に答える
15

ES6テンプレート文字列にはヒアドキュメント機能があります。

バックティック (` `) で囲まれた文字列を宣言でき、複数行に展開できます。

var str = `This is my template string...
and is working across lines`;

テンプレート文字列内に式を含めることもできます。これらは、ドル記号と中括弧 ( ${expression}) で示されます。

var js = "Java Script";
var des = `Template strings can now be used in ${js} with lot of additional features`;

console.log(des); //"Template strings can now be used in Java Script with lot of additional features"

実際には、Tagged Temple Strings や Raw Strings などの機能がさらに含まれています。ドキュメントは次の場所にあります。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings

于 2015-11-17T16:10:13.773 に答える
8

JavaScript にコンパイルされる言語であるCoffeeScriptを使用できます。コードは 1 対 1 で同等の JS にコンパイルされ、実行時に解釈されません。

そしてもちろん、ヒアドキュメントがあります:)

于 2010-12-07T12:21:39.087 に答える
1

この投稿で Tim Disney によって作成されたように、Sweet.js マクロを使用して追加できます。

このアプローチでは、代わりにバッククォートを文字列区切り記号として使用することに注意してください。

let str = macro {
    case {_ $template } => {
        var temp = #{$template}[0];
        var tempString = temp.token.value.raw;
        letstx $newTemp = [makeValue(tempString, #{here})];
        return #{$newTemp}
    }
}

str `foo bar baz`
于 2014-08-09T12:25:20.897 に答える
0

手元に html と jQuery があり、文字列が有効な HTML である場合、これが役立つ場合があります。

<div id="heredoc"><!--heredoc content
with multiple lines, even 'quotes' or "double quotes",
beware not to leave any tag open--></div>
<script>
var str = (function() {
   var div = jQuery('#heredoc');
   var str = div.html();
   str = str.replace(/^<\!--/, "").toString();
   str = str.replace(/-->$/, "").toString();
   return str;
})();
</script>

テキスト間にコメント「<!-- -->」が含まれていても機能しますが、テキストの一部が表示される場合があります。これがフィドルです:https://jsfiddle.net/hr6ar152/1/

于 2015-03-25T21:11:02.583 に答える