0

我很困惑,我不确定我对 jQuery 的了解在哪里崩溃。谁能解释为什么这不起作用?(我已经设置了一个JSFiddle 页面,以便更容易直接进入)

给定 HTML:

<ul id="MyList"></ul>

和 Javascript 字符串:

var itemString = "Item1,Item2,Item3";

为什么以下将字符串附加为 LI 对象的方法不起作用(报告的错误是 NOT_FOUND_ERR: DOM Exception 8):

aStrings = itemString.split(",");
aLi = $.map($.makeArray(aStrings), function(x) {
    return $("<li>").text(x);
});
$("#MyList").append(aLi);

使用 $.each() 有效(以下示例),但是我对 $.map 方法的理解有什么问题?

aStrings = itemString.split(",");
$.each(aStrings, function(i, x) {
  $("MyList").append($("<li>").text(x));
});

我的数组 aLi 不是真正的 LI DOM 元素集合吗?

提前致谢...

4

2 回答 2

2

甚至没有理由在映射中将您想要的简单 html 包装在 jQuery 中。它会创建额外的不必要的函数调用。此外,aStrings已经是一个数组,因此无需使用$.makeArray()

试试这个:

   aStrings = itemString.split(",");
   aLi = $.map(aStrings, function(x) {
        return  "<li>" + x +"<li>";
   }).join('');

   $("#MyList").append(aLi);

$.map返回一个字符串数组,然后将其join()更改为单个字符串,然后附加该字符串

演示:http: //jsfiddle.net/3cYaW/2/

于 2012-06-15T23:54:09.153 回答
1

来自 jQuery 文档:

描述:通过一个函数传递当前匹配集中的每个元素,生成一个包含返回值的新 jQuery 对象。

您没有在匹配的集合上使用它,即$('someSelector').map(function{}).doSomethingWithReturnedJQueryObject(). 如果您将项目放在一个列表中并希望将它们移动到不同的列表中,您可以使用 map 函数,但我认为它不打算以您在非工作示例中的方式使用。

换句话说:该map()功能旨在以与您在此处尝试使用它的方式完全相反的方式使用。您可以使用它来获取每个内容<li>并从中构建 index1,index2,index3 字符串。

于 2012-06-15T23:44:52.563 回答