我正在尝试格式化(美化,整理,清理......你的名字)我的javascript代码中的HTML片段,或者换句话说,将其分散在多行而不是将其写在一行上,它可以很容易地阅读。
基本上,它是一段html代码,我试图通过调用jQuery的.append();
方法附加到页面。
这就是我要做的事情:
$('.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;
我没有任何问题。
我知道这个问题并不是什么大问题,但我只是为了简单起见而试图解决这个问题。
有什么建议吗?
答案 0 :(得分:21)
如果您有多行字符串,则需要使用multiline string syntax。
但是,最好将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>`;
答案 1 :(得分:10)
如果你想写一个多行字符串,你应该使用“\”:
示例:
$('.videos').append('<li> \
<span>' + count + '</span> - \
<a href="' + vList[i].player + '"> \
<span class="title">' + videoTitle + '</span> \
</a> \
</li>');
答案 2 :(得分:7)
使用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>');
答案 3 :(得分:1)
如果您只想将渲染输出拆分为新行,则在您想要换行的位置附加\ 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);
答案 4 :(得分:0)
你可以这样尝试
$('.videos').append( ['<li>',
'<span>' + count + '</span> - ' ,
'<a href="' + vList[i].player + '">' ,
'<span class="title">' + videoTitle + '</span>' ,
'</a>' ,
'</li>'].join('') );
答案 5 :(得分:0)
从https://material.angular.io/components/stepper/api,第9章 JavaScript入门:
”如果要将文本字符串分成几行,则可以使用以下反斜杠\
字符来指示文本字符串在下一行继续。
适当的换行符示例:
window.alert("Welcome \
to Tulsa");