私は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;
全く問題ありませんでした。
この問題はそれほど大きな問題ではないことはわかっていますが、簡単にするために問題を回避しようとしています。
助言がありますか?
複数行の文字列がある場合は、 複数行の文字列構文 を使用する必要があります。
ただし、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>`;
複数行の文字列を記述したい場合は、「\」を使用する必要があります。
例:
$('.videos').append('<li> \
<span>' + count + '</span> - \
<a href="' + vList[i].player + '"> \
<span class="title">' + videoTitle + '</span> \
</a> \
</li>');
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>');
レンダリングされた出力を単に新しい行に分割したい場合は、次のように、改行を表示する場所に\ 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);
あなたはこのように試すことができます
$('.videos').append( ['<li>',
'<span>' + count + '</span> - ' ,
'<a href="' + vList[i].player + '">' ,
'<span class="title">' + videoTitle + '</span>' ,
'</a>' ,
'</li>'].join('') );