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()関数は、ここで使用しようとしているのとは正反対の方法で使用されることを意図しています。これを使用してそれぞれのコンテンツを取得し<li>、そこから index1、index2、index3 文字列を作成できます。

于 2012-06-15T23:44:52.563 に答える