使用append()追加大块html

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

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

Co-Borrower Information














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

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

删除换行符。

http://jsfiddle.net/DmERt/

 var large = '

Co-Borrower Information














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

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

大多数人如何做到这一点是这样的:

 var myString = '

Line One

' + '

Line Two

' + '

Line Three

';

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

 var myString = `

Line One

Line Two

Line Three

`;

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

 
Some HTML

jQuery的:

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

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

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

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

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

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

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

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

 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

您还可以使用jQuery克隆div,然后附加克隆 – 方式不那么混乱。

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

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

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

或者,对于集合:

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