2013-04-21 63 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