web-dev-qa-db-ja.com

JavaScriptコード内で文字列を複数行に分割する

私はJavaScriptコード内のHTMLのスニペットをフォーマット(美化、整頓、片付け..名前を付けます)しようとしています。つまり、1行で書くのではなく、複数行に広げて、読みやすい。

基本的に、これはjQueryの.append();メソッドを呼び出してページに追加しようとしているhtmlコードです。

そして、これが私がやろうとしていることです:

$('.videos').append('<li>
                    <span>' + count + '</span> - 
                    <a href="' + vList[i].player + '">
                        <span class="title">' + videoTitle + '</span>
                    </a>
                    </li>');

どうやら、それはそのようには機能しません。 Uncaught SyntaxError: Unexpected token >

次のように書くと、すべて正常に動作します。

$('.videos').append('<li><span>' + count + '</span> - <a href="' + vList[i].player + '"><span class="title">' + videoTitle + '</span></a></li>');

私がここで正確なことをしようとしたとき、それはちょっと奇妙です、

var albumURL = API + '/video.get?=owner_id=' + userID +
                     '&album_id=' + aList[i].album_id +
                     '&access_token=' + accessToken;

全く問題ありませんでした。

この問題はそれほど大きな問題ではないことはわかっていますが、簡単にするために問題を回避しようとしています。

助言がありますか?

12
Simone

複数行の文字列がある場合は、 複数行の文字列構文 を使用する必要があります。

ただし、HTMLはコードではなくテンプレートに保存することをお勧めします:)これにより、HTMLが読みやすく、再利用しやすくなり、保守しやすくなります。

HTMLの-のようなものはどうですか?

<script type="text/template" id="videoTemplate">
    <li>
      <span>{{count}}</span>
      <a href="{{videoURL}}">
        <span class="title">{{videoTitle}}</span>
      </a>
    </li>
</script>

次にJavaScriptで

var template = $("#videoTemplate").html();
$(".videos").append(template.replace("{{count}}",count).
                             replace("{{videoURL}}",vList[i].player).
                             replace("{{videoTitle}}",videoTitle));

そうすることで、使用しているテンプレートとコードをより明確に分離できます。 HTMLを個別に変更して、コードの他の部分でより簡単に再利用できます。

コードはテンプレートの変更を認識する必要さえなく、デザイナーはJavaScriptを知らなくてもデザインを変更できます。

もちろん、これを頻繁に行う場合は、.replaceチェーンを持たずにテンプレートエンジンを使用できます。

ES2015では、テンプレート文字列も導入されています。これも一種のニースであり、原則として同じ目的を果たします。

 const videoTemplate = `<li>
      <span>${count}</span>
      <a href="${vList[i].player}">
        <span class="title">${videoTitle}</span>
      </a>
    </li>`;
21

複数行の文字列を記述したい場合は、「\」を使用する必要があります。

例:

$('.videos').append('<li> \
                <span>' + count + '</span> - \
                <a href="' + vList[i].player + '"> \
                    <span class="title">' + videoTitle + '</span> \
                </a> \
                </li>');
10
ProGM

新しい答え:

ES6を使用すると、改行に影響されない文字列連結を実際に使用できます。

var html = `
    <li>
        ${count}
    </li>
`;

改行は問題になりません。 ES6以前は、主に配列を使用してそれらを連結していました。その高速:

var html = [
    '<li>',
        count
    '</li>'
].join('');

古い答え:

Javascriptでは、行を+と連結するか、\を使用せずに行を分割することはできません。これを試して:

$('.videos').append('<li>' +
    '<span>' + count + '</span> - ' +
    '<a href="' + vList[i].player + '">' +
    '<span class="title">' + videoTitle + '</span>' +
    '</a>' +
    '</li>'); 
7
Sergio

レンダリングされた出力を単に新しい行に分割したい場合は、次のように、改行を表示する場所に\ nを追加します...

$('.videos').append('<li>\n<span>' + count + '</span> -\n<a href="' + vList[i].player + '">\n<span class="title">' + videoTitle + '</span>\n</a>\n</li>\n');

また、JSの見栄えを良くしたい場合は、これを試してみてください。これにより、レンダリングされたHTMLがインデントされます。

var item = '';

item += '<li>\n';
item += '    <span>' + count + '</span> -\n';
item += '    <a href="' + vList[i].player + '">\n';
item += '        <span class="title">' + videoTitle + '</span>\n';
item += '    </a>\n';
item += '</li>\n';

$('.videos').append(item);
1
ScaryLooking

あなたはこのように試すことができます

$('.videos').append( ['<li>',
    '<span>' + count + '</span> - ' ,
    '<a href="' + vList[i].player + '">' ,
        '<span class="title">' + videoTitle + '</span>' ,
    '</a>' ,
'</li>'].join('') );
0
rab