4

可能重复:
使用 .after() 添加 html 关闭和打开标签

我想显示<ul>高度几乎相同的 3 列列表 ( ),因此我正在计算<li>标签并使用 append 动态生成列表。但是当我$el.append($("</ul><ul class='new'>"))关闭当前列表并附加一个新列表时,它会像<ul class='new'></ul>.

我只想关闭<ul>标签并再次打开它。jQueryappend()函数是否以某种方式验证 DOM 结构?我怎样才能得到预期的结果?有更好的方法来实现这一点吗?

HTML:

<div id="mylist">
   here the list will show
</div>

查询:

var $el = $("#mylist");
$el.empty(); // remove old options
$el.append($("<ul class='new'>"));
var j = parseInt(response.length/3);
var i = 0;
$.each(response, function(key, value) {
  i++;
  if(i%j==0){
      $el.append($("</ul><ul class='new'>")).append($("<li></li>").text(value.nombre));
  }
  else{
     $el.append($("<li></li>").text(value.name));
  }});

预期结果:

<div >
   <ul class="new">
     <li>Lorem Ipsum</li>
     <li>Lorem Ipsum</li>
     <li>Lorem Ipsum</li>
   </ul><ul class="new"> //This is what I want to append
     <li>Lorem Ipsum</li>
     <li>Lorem Ipsum</li>
     <li>Lorem Ipsum</li>
   </ul><ul class="new">
     <li>Lorem Ipsum</li>
     <li>Lorem Ipsum</li>
   </ul>
</div>

我得到了什么:

<div id="mylist">
<ul class="new"></ul>
 <li>Lorem Ipsum</li>
 <li>Lorem Ipsum</li>
 <li>Lorem Ipsum</li>
 <ul class="new"></ul>
 <li>Lorem Ipsum</li>
 <li>Lorem Ipsum</li>
 <li>Lorem Ipsum</li>
 <ul class="new"></ul> 
 <li>Lorem Ipsum</li>
 <li>Lorem Ipsum</li>
</div>
4

3 回答 3

4

$('</ul><ul>')不会按照你的想法去做。它将尝试创建一个 DOM 元素,可能会导致<ul>.

您必须构建所需的每个元素并将它们拼凑在一起,或者使用.html(). 我绝对推荐这些选项中的第一个。

于 2013-02-04T23:35:06.947 回答
4

首先,重要的是要注意appending 是一个比innerHTML在元素上设置更昂贵的计算操作。其次,重要的是要注意 jQuery$('<ul />');通过document.createElement. 换句话说,它不像连接一个字符串。您不能创建部分元素。

你想要的是用原始字符串连接构建一个 HTML 字符串,然后通过innerHTML. 例如:

var colHTML = [];
var numPerCol = Math.ceil(response.length/3);
var i=0;
$.each(response, function(key, value) {
    var curCol = Math.floor(i / numPerCol);
    if (i % numPerCol == 0)
        colHTML[curCol] = '';
    colHTML[curCol] += '<li>' + value.nombre + '</li>'; // if nombre has invalid HTML, you need to escape it
});

var html = '<ul class="new">' + colHTML.join('</ul><ul class="new">') + '</ul>';
document.getElementById('mylist').innerHTML = html;
于 2013-02-04T23:40:26.587 回答
4

简单的:

LIVE DEMO

"strings"在需要的地方进行设置,而不是对象</ul><ul>

var arr = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14'];

var str = "<ul class='new'>";
for(var i=0; i<arr.length;) { 
              str += "<li>"+ arr[i++] +"</li>" ;  
  if(i%3===0) str += "</ul><ul class='new'>"   ;
}
str += "</ul>" ;

$("#mylist").html( str );
于 2013-02-04T23:42:35.443 回答