2012-05-25 123 views
14

我試圖使用jquery的append()追加大塊文本。使用append()添加大塊html()

$('#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

您是否有ID爲「accordian_container」的元素? – nunespascal

+0

控制檯上是否存在特定的錯誤消息? – David

回答

19

刪除換行符。

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);​ 
+1

'$('#accordion_container')。append(large);'因爲這是他如何發佈的。 (假設他有一個ID爲'accordion_container'的元素) –

+0

這會將它附加到所有div元素。不是你通常想要的東西。 – nunespascal

+1

這是一個從我的小提琴示例中拉出的樣本。這個問題附加到一個ID中,我認爲提問的人會有足夠的常識來將它追加到想要追加的地方。更新。 –

8

這是我的理解是,如果你希望把你的長字符串在多行,它是更有效地使用字符串數組,並加入他們的行列。

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

JavaScript沒有在你編寫它們的方式多行字符串,你不能只是打開一個字符串在同一行,往下走了幾行,然後將其關閉。 (在JS中有多種方式來處理多行字符串,但它們有些倒退)。

大多數人如何做到這一點是這樣的:

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

注意,上面的答案是舊的,不再是完全正確的。作爲ES6,隨着越來越多的人從ES6 transpile變得越來越普遍,我們越來越多的能夠使用模板文字,它可以作爲多行字符串:

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

如果文本有單引號(')ex'Mr.Ms ',grunt構建將失敗,請使用下面的答案。它爲我工作。 –

12

你應該在HTML創建一個模板被隱藏,然後附加其內容HTML。例如:

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

的jQuery:

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

在JavaScript字符串把HTML是難以閱讀和搜索,很容易出錯,您的IDE將難以正確格式化。

+0

我可以多次插入相同的模板嗎? –

+0

@FranciscoCorralesMorales是的 - 前傾盡可能多的你喜歡 – rybo111

+0

絕對是正確的做法,我已經添加了一個小例子的HTML模板來澄清你的答案 –

0

你也可以用jQuery克隆div,然後追加克隆方式 - 不那麼雜亂。

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

如果換行符是一個問題,只是使用innerHTML,工作在每一個瀏覽器,因爲IE5:

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

或者,收藏:

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

您可以使用反斜槓每一行的結尾。

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

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

我使用奧利弗所說的所有時間在JS中,因爲它看起來更人性化。而且,您不必每行都定義行情並連接:這是我的http://jsfiddle.net/49gpqwua/(JSFiddle) – Preactive

3

另一種方法是模板文字回蜱

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

+0

請注意,名稱已更改爲**模板文字**,並且在該示例中用於縮進第二行的空格將是結束字符串的一部分。仍然是一個有效的答案,值得注意的是這兩件事。 –

+0

感謝您指出這一點,@JimboJonny – gustavwiz

+0

這是黃金,非常感謝。 –