在javascript代码中将字符串分成多行

时间:2013-10-11 07:57:05

标签: javascript jquery html embedded-resource

我正在尝试格式化(美化,整理,清理......你的名字)我的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;

我没有任何问题。

我知道这个问题并不是什么大问题,但我只是为了简单起见而试图解决这个问题。

有什么建议吗?

6 个答案:

答案 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");