使用append()附加大块html

时间:2012-05-25 18:13:29

标签: javascript jquery html append

我试图使用jquery的append()追加一大块文本。

$('#add_contact_btn').click(function(event) {
    event.preventDefault();

    var large = '<div class="accordian_container"><a href="#" class="accordian_trigger"><h4>Co-Borrower Information</h4></a><hr/><div class="accordian_item" id="accord_item_2"><label> First Name</label><br/><input type="text"/><br/><label>Middle Name</label><br/>
            <input type="text"/><br/>
            <label>Last Name</label><br/>
            <input type="text" /><br/>
            <label>Home Number</label><br/>
            <input type="text"/><br>
            <label>Work Number</label><br/>
            <input type="text"/><br>
            <label>Cell Number</label><br/>
            <input type="text"/><br>
            </div>
            </div>';

    $('#accordion_container').append(large);



});

它似乎没有工作,在查看append()的文档后,我无法弄清楚为什么 - 任何想法?我试图附加大量的HTML吗?

11 个答案:

答案 0 :(得分:29)

Javascript在编写它们的方式上没有多行字符串,你不能只在一行上打开一个字符串,向下走几行然后关闭它。 (有一些方法可以在JS中执行多行字符串,但它们有点向后)。

大多数人这样做是这样的:

var myString = '<p>Line One</p>' +
'<p>Line Two</p>' +
'<p>Line Three</p>';

注意以上答案是旧的,不再完全正确。随着ES6变得越来越普遍,随着越来越多的人从ES6中传播,我们越来越能够使用模板文字,它可以用作多行字符串:

var myString = `<p>Line One</p>
<p>Line Two</p>
<p>Line Three</p>`;

答案 1 :(得分:27)

您应该在HTML中创建一个隐藏的模板,然后附加其内容HTML。例如:

<div class="hide" id="template">
  <b>Some HTML</b>
</div>

jQuery的:

$("#container").append($("#template").html());

将HTML放在JavaScript字符串中更难以阅读和搜索,容易出错,并且IDE很难正确地格式化它。


更新2019

查看为此目的创建的template标记:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template

template标记甚至可以包含其他地方无效的HTML,例如td之外的table标记。

答案 2 :(得分:24)

删除换行符。

http://jsfiddle.net/DmERt/

var large = '<div class="accordian_container"><a href="#" class="accordian_trigger"><h4>Co-Borrower Information</h4></a><hr/><div class="accordian_item" id="accord_item_2"><label> First Name</label><br/><input type="text"/><br/><label>Middle Name</label><br/><input type="text"/><br/><label>Last Name</label><br/><input type="text" /><br/><label>Home Number</label><br/><input type="text"/><br><label>Work Number</label><br/><input type="text"/><br><label>Cell Number</label><br/><input type="text"/><br></div></div>';

$('#accordion_container').append(large);​

答案 3 :(得分:8)

我的理解是,如果你想把长字符串放在多行上,那么使用字符串数组并加入它们会更有效。

var bigString = [
    'some long text here',
    'more long text here',
    '...'
];
$('#accordion_container').append(bigString.join(''));

答案 4 :(得分:7)

您可以在每行末尾使用反斜杠。

http://davidwalsh.name/multiline-javascript-strings

var multiStr = "This is the first line \
This is the second line \
This is more...";

答案 5 :(得分:6)

另一种选择是模板文字反向标记

var large = `some long text here
some long text here
some long text here`;

它是一种相当新的语法,但在IE中不受支持。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

答案 6 :(得分:2)

JavaScript可以选择将多行/ HTML部分扩展为一行,对于HTML行的每一行,添加 backslash()以标识其继续行。

注意:-附加行时唯一要考虑的是单引号和双引号。如果您以单引号开头,请在内部字符串中使用双引号,反之亦然,否则,行将中断并且无法获得正确的结果。

$(element).append('<div class="content"><div class="left"></div><div class="right"></div></div>');

JavaScript语法

 var str = ' <div class="content"> \
<div class="left"> \
</div> \
<div class="right"> \
</div> \
</div> ';

 document.getElementsByName(str).html(str);
 //or
 document.getElementsById(str).html(str);

jQuery语法

 $(element).append(' \
  <div class="content"> \
    <div class="left"> \
    </div> \
    <div class="right"> \
    </div> \
  </div> \
');

您可以使用jQuery

的第三个链接中提到的HTML模板
$("#div").load("/html_template.html");

http://www.no-margin-for-errors.com/blog/2010/06/17/javascript-tip-of-the-day-extending-a-string-across-multiple-lines/

Appending multiple html elements using Jquery

spread html in multiple lines javascript

答案 7 :(得分:1)

你也可以用jQuery克隆div,然后附加克隆 - 不那么混乱。

var accordionClone = $('.accordion_container').clone();
$('#accordion_container').append(accordionClone);

答案 8 :(得分:0)

如果换行是一个问题,只需使用innerHTML,自IE5以来每个浏览器都有效:

$('#accordion_container')[0].innerHTML += large;​

或者,对于集合:

$('.accordion_container').forEach(function () {
    this.innerHTML += large;​
});

答案 9 :(得分:0)

只需添加$(#element).append({large_html),large_html这样的特殊字符(``),然后谢谢我。

答案 10 :(得分:0)

默认情况下,包含换行的HTML代码不能与append/prepend直接使用'or"一起使用。但是,目前有以下方法可以做到这一点:

  1. 使用“ +”号加入HTML代码段。

  2. 使用“ \”转义。

  3. 使用“`”(反引号,grave accent),不需要任何其他操作。 ES2015 / ES6 Template literals)支持此方法。

  4. 添加一个隐藏的tag,其中包含您需要的相同HTML代码,例如<p id="foo" style="display:none;">,然后使用.append($('#foo').html());

    现在将一些使用场景发布到上面提到的first three methods(只需在Chrome浏览器的控制台中运行它们): enter image description here

我们可以清楚地看到它们之间的差异。