2012-06-15 55 views
0

我很困惑,我不確定我在jQuery方面的知識在哪裏崩潰。任何人都可以解釋爲什麼這不起作用? (我已經建立了一個JSFiddle page,以使其更容易跳右)從jQuery中的字符串列表創建和附加DOM對象

由於HTML:

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

和JavaScript字符串:

var itemString = "Item1,Item2,Item3"; 

爲什麼以下方法附加字符串作爲LI對象不起作用(報告的錯誤是NOT_FOUND_ERR:DOM異常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元素的真實集合嗎?

預先感謝...

回答

2

真的沒有理由甚至在映射中包裝你想要的jQuery中的簡單html。它會產生額外的不必要的函數調此外,aStrings是已經形成陣列不需要使用$.makeArray()

嘗試這種情況:

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

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

$.map返回一個字符串數組,其join()接着變爲然後把它所附

DEMO一個字符串:http://jsfiddle.net/3cYaW/2/

1

從jQuery文檔:

描述:通行證中的每個元件的電流匹配通過函數設定,製造含有的返回值的新jQuery對象。

您並未在匹配的集合上使用它,即$('someSelector').map(function{}).doSomethingWithReturnedJQueryObject()。如果你有一個列表中的項目,並希望將它們移動到不同的列表中,則可以使用map函數,但我不認爲它的用意與您的非實際示例中的方式相同。

換句話說:map()函數旨在以與您在此嘗試使用它完全相反的方式使用。您可以使用它來獲取每個<li>的內容並從中構建index1,index2,index3字符串。

+0

爲'map()'讀取錯誤的文檔...看看http://api.jquery.com/jQuery.map/ – charlietfl

+0

哈哈。抱歉。好吧,這有點混淆了jQuery有兩個這樣的不同功能簽名幾乎相同。閱讀完該頁後,我同意@charlietfl給出的答案。 –

+0

有幾個jQuery方法,比如'map'和'each'可以以不同的方式使用。也與jQuery內部使用有關。 – charlietfl