Добавление большого блока 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, который я пытаюсь добавить?
Ответы
Ответ 1
Удалите разрывы строк.
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);
Ответ 2
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>`;
Ответ 3
Вы должны создать шаблон в 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
.
Ответ 4
Я понимаю, что если вы хотите поместить свою длинную строку на несколько строк, более эффективно использовать массив строк и присоединиться к ним.
var bigString = [
'some long text here',
'more long text here',
'...'
];
$('#accordion_container').append(bigString.join(''));
Ответ 5
Вы можете использовать обратную косую черту в конце каждой строки.
http://davidwalsh.name/multiline-javascript-strings
var multiStr = "This is the first line \
This is the second line \
This is more...";
Ответ 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
Ответ 7
В Javascript есть возможность расширить несколько строк/раздел HTML в одну строку, для каждой строки строки HTML добавьте обратную косую черту(), чтобы определить, что это строка продолжения.
Примечание: -The нужно учитывать только то, что в строках добавления есть одинарные и двойные кавычки. Если вы начинаете с одинарной кавычки, то используйте двойную кавычку во внутренней строке или наоборот, в противном случае строка разрывается и не дает правильного результата.
$(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> \
');
Или вы можете использовать шаблон HTML для этого, как упоминание в 3-й ссылке через jquery
$("#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/
Добавление нескольких HTML-элементов с использованием Jquery
распространять HTML в несколько строк JavaScript
Ответ 8
Вы также можете клонировать div с помощью jQuery, а затем добавить клон-путь менее беспорядочно.
var accordionClone = $('.accordion_container').clone();
$('#accordion_container').append(accordionClone);
Ответ 9
Если разрывы строк являются проблемой, просто используйте innerHTML, работает в каждом браузере с IE5:
$('#accordion_container')[0].innerHTML += large;
Или, для коллекций:
$('.accordion_container').forEach(function () {
this.innerHTML += large;
});
Ответ 10
просто добавьте вот так ($ element).append(large_html
), large_html специальным символом ('') и поблагодарите меня позже.
Ответ 11
По умолчанию HTML-код, содержащий переносы, нельзя использовать с append/prepend
предварительным append/prepend
непосредственно с помощью 'or"
. Однако в настоящее время для этого есть следующие методы:
-
Используйте "+", чтобы соединить фрагменты кода HTML.
-
Используйте "\", чтобы убежать.
-
Используйте "" (обратный тик, серьезный акцент), не нужно никаких дополнительных операций. Этот метод поддерживается в ES2015/ES6 (литералы шаблонов).
-
Добавьте скрытый tag
содержащий тот же HTML-код, который вам нужен, например, <p id="foo" style="display:none;">
, затем используйте .append($('#foo').html());
,
Теперь опубликуйте некоторые сценарии использования для first three methods
упомянутых выше (просто запустите их в консоли браузера Chrome
.): ![enter image description here]()
Мы можем ясно видеть их различия.