【问题标题】:Breaking a string into multiple lines inside a javascript code在javascript代码中将字符串分成多行
【发布时间】:2013-10-19 05:39:57
【问题描述】:

我正在尝试在我的 javascript 代码中格式化(美化、整洁、清理..你的名字)HTML 的 sn-p,或者换句话说,将它分散到多行而不是写在一行上行,以便于阅读。

基本上,这是一段 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 &gt;

当它写成如下时,一切正常。

$('.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;

我一点问题都没有。

我知道这个问题没什么大不了,但为了简单起见,我正在尝试解决它。​​

有什么建议吗?

【问题讨论】:

标签: javascript jquery html embedded-resource


【解决方案1】:

来自New Perspectives on HTML5, CSS, and JavaScript 6th Edition,第 9 章 JavaScript 入门:

"如果要将文本字符串分成多行,可以使用以下反斜杠\ 字符指示文本字符串在下一行继续。

正确换行的示例:
window.alert("Welcome \
to Tulsa");

【讨论】:

    【解决方案2】:

    如果你有一个多行字符串,你需要使用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>`;
    

    【讨论】:

    • 谢谢@Benjamin。这绝对是一个很好的建议。我学到了一些新东西!
    【解决方案3】:

    新答案:

    在 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>'); 
    

    【讨论】:

    • 谢谢@Sergio。这对我帮助很大,我更喜欢使用 \ 而不是 +,因为我不必用引号分割整个代码。
    【解决方案4】:

    如果您只是想将渲染输出拆分到新行上,则将 \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);
    

    【讨论】:

    • 这如何工作?我们每次都在重新初始化项目变量?请解释这是如何工作的?
    • 公平点。这个例子是完全错误的!我已经纠正了。它只是一组语句,以使其更易于阅读的方式附加字符串的位。
    【解决方案5】:

    你可以这样试试

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

    【讨论】:

      【解决方案6】:

      如果你想写一个多行字符串,你应该使用“\”:

      示例:

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

      【讨论】:

        猜你喜欢
        • 2010-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-13
        • 1970-01-01
        • 2020-03-28
        • 2016-03-11
        • 2023-03-20
        相关资源
        最近更新 更多