2016-10-19 3 views
0

マルチライン変数をTemplate Literalsに変更していますが、驚くべきことですが、私が行ったインデントが\nに元のインデントで変換されているコード。どうすればそれを避けることができますか?ES6テンプレートリテラル - 文字列から nを削除する

例:

var $div = $(`<div class='proj' id='projects'> 
       <div class='bot-nav'>${txt}</div> 
      </div>`); 

それはに変換されます:

var $div = $("<div class='proj' id='projects'>\n     <div class='bot-nav'>"+txt+"</div>\n   </div>"); 

そして、私はこれ欲しい:

var $div = $("<div class='proj' id='projects'><div class='bot-nav'>"+txt+"</div></div>"); 

これを行うにはどのような方法がありますか?

+1

どのような違いがありますか? DOMはどちらの場合も同じです。 – Barmar

+1

これは、コンパイルされたfile.jsを理由なしで大きくします。 –

+4

@Barmar:ほとんど、しかしかなり...テキストノードではありません。 –

答えて

4

.replaceを使用しているときに(他の回答で提案されているように)動作しますが、それはやってのクールな新しい光沢のある方法ではありませんあなたが探しているのは、ES2015で導入されたリテラルタグ機能(別名「タグ付きテンプレート」)だと思います。

https://github.com/declandewet/common-tags

そして、あなたはおそらくoneLine(またはoneLineTrim)を望む:

それらの束がここにあります

oneLine` 
    foo 
    bar 
    baz 
` 
// "foo bar baz" 

注:oneLineは、明らかに、内部的にreplaceを使用しています。

+0

これを使う方法がわかっているのかどうか分かりません。私は最初の行 'import stripIndent/node_modules/common-tags/lib/stripIndent ';' のindex.jsを追加しましたが、コンソールには '10Uncaught SyntaxError:Unexpected token import'があります。私は何が欠けていますか?私は仕事のランナーとしてギャルを使用しています –

+0

私はバベルを設定していないと思いますか?共通タグの3番目の要件です - http://babeljs.io/ – Liel

+0

私は持っています。 babel、stripDebug、uglify、gutil cached、およびrenameの順番でスクリプトを処理するgulpタスクの内部。 –

0

あなたはそれらの後、すべての新しいラインとスペースを削除するためにString.prototype.replace()メソッドを使用することができます。

var $div = $(`<div class='proj' id='projects'> 
       <div class='bot-nav'>${txt}</div> 
      </div>`.replace(/\n\s+/g, '')); 
+0

また、改行の後の空白を置き換えたいとします。 – Barmar

+1

彼女*、彼は... –

+2

@サンドリーナペレイラ申し訳ありません。インターネット上では誰もあなたが女の子だとは知らない。 – Barmar

0

あなたは改行を削除するには

.replace使用したい先頭と末尾の空白を削除するには、/

var $div = $(`<div class='proj' id='projects'> 
      <div class='bot-nav'>${txt}</div> 
     </div>`.replace(/^\s+|\s+$/gm, '').split('\n').join('')); 

または関数

function someFunctionName(str) { 
    return str.replace(/^\s+|\s+$/gm, '').split('\n').join('') 
} 

var $div = $(someFunctionName(`<div class='proj' id='projects'> 
      <div class='bot-nav'>${txt}</div> 
     </div>`)); 
2
let literal = `template  literal 
       string so many holes`; 

literal.replace(/\s+/g, ' '); 
を作るに参加分割することができます

これは1つ以上のスペースを1つのスペースに置き換えます。

関連する問題