如何使用 JQuery 在空文档中附加 HTML 标签?

How to append HTML tags in empty document with JQuery?

我有一个函数,可以将 returns 一个包含 HTML 个元素的列表添加到另一个标签中。此函数应按如下方式调用:

$('#somewhere').append(getElements())

为了测试可行性我写了这个:

var el = $() 

for (u in ['foo', 'bar']) {
    el.append($('<li>').addClass(u).text(u + 'Text'))
}

$('<ul>').append(el).html()

最终我一无所获<ul>。为什么?我的错误在哪里?我怀疑 $() 无法按预期工作,因为如果我改为 var el = $('<div>'),它就会工作。

备注

我本可以使用:

getElementsInto('#somewhere')

但我更愿意:

$('#somewhere').append(getElements())

append appends the given elements to every element in the jQuery set you call it on. $() is an empty jQuery set, so append on it is a no-op. There are no elements to append to. (Also note that you're using the wrong style of loop 遍历一个数组;在你的循环中,u 将是 "0",然后是 "1"。)另外,在不使用 return 值的情况下调用 .html() 是空操作。

add 将创建一个新的 jQuery 对象并添加以下内容:

var elements = $();

['foo', 'bar'].forEach(function(u) {
    elements = elements.add($('<li>').addClass(u).text(u + 'Text'));
});

var ul = $('<ul>').append(elements);
// then append `ul` somewhere...
ul.appendTo(document.body);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

...但我想我会构建一个数组中的元素。在你的情况下,因为你的起点是一个数组,你可以使用 map:

var elements = ['foo', 'bar'].map(function(u) {
  return $('<li>').addClass(u).text(u + 'Text');
});

var ul = $('<ul>').append(elements);
// then append `ul` somewhere...
ul.appendTo(document.body);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>