首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery追加()不添加</ul><ul>

jQuery追加()不添加</ul><ul>
EN

Stack Overflow用户
提问于 2013-02-04 23:20:12
回答 2查看 3.8K关注 0票数 4

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

我希望显示高度几乎相同的3列列表(<ul>),因此我将对<li>标记进行计数,并使用追加来动态生成列表。但是,当我执行$el.append($("</ul><ul class='new'>"))关闭当前列表并追加一个新列表时,它会追加一个类似于<ul class='new'></ul>的列表。

我只想关闭<ul>标记并再次打开它。jQuery append()函数是否在某种程度上验证DOM结构?我怎样才能得到检查结果?有什么更好的方法来实现这一点吗?

HTML:

代码语言:javascript
复制
<div id="mylist">
   here the list will show
</div>

Jquery:

代码语言:javascript
复制
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));
  }});

预期结果:

代码语言:javascript
复制
<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>

我得到的是:

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2013-02-04 23:35:06

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

您必须构建所需的每个元素并将它们组合在一起,或者使用.html()作为字符串对html进行操作。我绝对推荐这些方案中的第一种。

票数 4
EN

Stack Overflow用户

发布于 2013-02-04 23:40:26

首先,需要注意的是,appending比在元素上设置innerHTML要昂贵得多。其次,需要注意的是,jQuery通过document.createElement将HTML (例如$('<ul />'); )解析为DOM元素。换句话说,它不像连接一个字符串;您不能创建部分元素。

您需要的是构建一个带有原始字符串连接的HTML,然后通过innerHTML将其转储到DOM中。例如:

代码语言:javascript
复制
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;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14697567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档