jquery $ .each是非阻塞的吗?

时间:2011-03-28 17:43:41

标签: javascript jquery

$("<ol>").appendTo(some_div);
$.each(map, function(i,example){
  $("<li>" + example + "</li>").appendTo(some_div)
});
$("</ol>").appendTo(some_div);

预期:     <ol><li>example1</li><li>example2</li></ol>

实际:     <ol></ol><li>example1</li><li>example2</li>

知道为什么会这样吗?

4 个答案:

答案 0 :(得分:11)

您正在执行DOM操作而不是字符串操作。 $("<ol>")已经创建了OL元素,而不仅仅是包含<ol>的字符串。

您需要将LI元素附加到新创建的OL元素:

var ol = $("<ol>").appendTo(some_div);
$.each(map, function(i,example){
    $("<li>" + example + "</li>").appendTo(ol);
});

答案 1 :(得分:8)

您应该将<li>条目附加到<ol>。否则,您无法知道浏览器将如何处理您的代码。此外,您应该添加<ol></ol>而不是单独的<ol></ol>。 jQuery的.append.appendTo不是字符串操作,它们正在修改页面DOM树。

$("<ol></ol>").appendTo(some_div);
olelement = $(some_div).find("<ol>")
$.each(map, function(i,example){
  $("<li>" + example + "</li>").appendTo(olelement);
});

答案 2 :(得分:2)

这一行

$("<ol>").appendTo(some_div);

不仅仅是按照您的想法添加开放标记。 jQuery正在构建一个有序列表元素并将其添加到some_div。同样,你的$ .each将列表项元素追加到some_div,因此它们最终成为列表的兄弟。您需要将列表项附加到列表元素。

答案 3 :(得分:0)

我相信$("<ol>").appendTo会创建完整的<ol></ol>标记。将li项附加到您创建的OL,或者创建一个长字符串,然后执行一个追加。追加是一项昂贵的操作,如果你有10个或更多的列表项你应该做后者。