我试图使用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吗?
答案 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很难正确地格式化它。
查看为此目的创建的template
标记:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template
template
标记甚至可以包含其他地方无效的HTML,例如td
之外的table
标记。
答案 2 :(得分:24)
删除换行符。
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");
答案 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"
一起使用。但是,目前有以下方法可以做到这一点:
使用“ +”号加入HTML代码段。
使用“ \”转义。
使用“`”(反引号,grave accent),不需要任何其他操作。 ES2015 / ES6 (Template literals)支持此方法。
添加一个隐藏的tag
,其中包含您需要的相同HTML代码,例如<p id="foo" style="display:none;">
,然后使用.append($('#foo').html());
。
现在将一些使用场景发布到上面提到的first three methods
(只需在Chrome
浏览器的控制台中运行它们):
我们可以清楚地看到它们之间的差异。