2013-04-21 67 views
0

使用jQuery用於創建動態的結構,創建多個格結構動態

我試圖解決一個問題,一個div ..

但是,我不知道爲什麼?我的div 「內容」 直接關閉...

我的結果:

<li class="monde"> 
    <div class="content"> 
    </div>  // -----------> problem content div here 
    <div class="ctn_img"> 
     <img src="myimage.png" /> 
    </div> 
     <div class="choix"> 
      <input type="checkbox" class="checkbox" /> 
     </div> 
    <div class="infos"> 
     <span class="caption"> 
      <a href="#"><span class="stats">Etats</span></a> 
      <input type="text" class="name" /> 
      <span class="test">test</span> 
     </span> 
    </div> 
    // <-------------- better content close here... 
    <span class="glob">Global</span> 
</li> 

demo here

回答

1

那麼你應該追加連班.ctn_img.choix.infos元素.content,而不是<li> ,即

// ... 
ctn_img = $('<div>').addClass('ctn_img').append(image).appendTo(content), 
choix = $('<div>').addClass('choix').html('<input ... />').appendTo(content), 
infos = $('<div>').addClass('infos').append(caption).appendTo(content), 
// ... 
result = $('<li>').addClass('monde').append(content, glob); 

DEMO:http://jsfiddle.net/nGRwJ/1/

+0

謝謝你,我知道是我的問題,現在:) +1 – Kate 2013-04-21 22:09:54

+0

@Kate歡迎您:) – VisioN 2013-04-21 22:14:40

2
var content = $('<div>').addClass('content'), 
    image  = $("<img>").attr('src', 'myimage.png'), 
    ctn_img = $('<div>').addClass('ctn_img').append(image), 
    choix  = $('<div>').addClass('choix').html('<input type="checkbox" class="checkbox" />'), 
    caption = $('<span>').addClass('caption').html('<a href="#"><span class="stats">Etats</span></a><input type="text" class="name"></span><span class="test">test</span>'), 
    infos  = $('<div>').addClass('infos').append(caption), 
    glob  = $('<span>').addClass('glob').html('Global'); 

    content.append(ctn_img).append(choix).append(infos).append(glob); 
    var result = $('<li>').addClass('monde').append(content); 

$(document.body).html(result); 
+0

所有的答案是幫了我,所以謝謝@razzak ... – Kate 2013-04-21 22:30:08

0

您當前的做法至少有兩個缺點:

  1. 真的很難保持結構(你面臨這個問題)。
  2. 太多append和DOM操作會降低性能。

怎麼樣建立HTML這樣的:

var result = $([ 
    '<li class="monde">', 
     '<div class="content">', 
      '<div class="ctn_img">', 
       '<img src="myimage.png">', 
      '</div>', 
      '<div class="choix">', 
       '<input type="checkbox" class="checkbox">', 
      '</div>', 
      '<div class="infos">', 
       '<span class="caption">', 
        '<a href="#"><span class="stats">Etats</span></a>', 
        '<input type="text" class="name">', 
        '<span class="test">test</span>', 
       '</span>', 
      '</div>', 
     '</div>', 
     '<span class="glob">Global</span>', 
    '</li>' 
].join('')); 

$(document.body).html(result); 

更容易閱讀。或考慮使用模板。

http://jsfiddle.net/baAUt/1/

+1

這種做法是很好的但有一個很大的缺點。 *使用'innerHTML'屬性(或者jQuery的'html()'方法)來修改元素的結構使得DOM能夠對標記進行序列化/反序列化,而創建和附加元素的速度要快很多倍,因爲使用樹直。 – VisioN 2013-04-21 22:07:50

+0

謝謝你的回答,我知道你的方法,維護一個模板很容易,但我更喜歡複雜的學習結構.... – Kate 2013-04-21 22:27:43