このコードを想定します:
$('div')
.append("<ul>")
.append("<li>");
.append('foo');
.append("</li>")
.append("</ul>")
結果の構造(Chrome 21)を見てみましょう。
<div>
<ul></ul>
<li></li>
foo
</div>
何が起こった?.append
各引数を取り、文字列を適切なDOM要素に変換します。したがって、コードは次のようにするのと同じです。
$('div')
.append(document.createElement('ul'))
.append(document.createElement('li'));
.append(document.createTextNode('foo'));
終了タグを含む2つの呼び出しは、有効なHTML / DOM要素に変換できないため、無視されます。
.append
(および他のすべてのDOM操作メソッド)はDOM要素に取り組んでいます。これは、jQueryが.appendChild
[MDN]を呼び出す方法にすぎません。
HTMLは、構造を表す特定の形式にすぎません。そこでは、各要素は開始タグと(オプションの)終了タグで表されます。ブラウザはHTMLを解析し、メモリ内にDOMを作成します。DOM(Document Object Model)は、階層的で構造化されたデータと対話するための明確に定義されたインターフェイスです。DOMを使用すると、開始タグと終了タグは存在しなくなり(HTML)、ノードのみが存在します。MDNのDOMについて読むことをお勧めします。
jQueryを使用すると、便利なためHTML文字列を渡すことができます.append
が、各文字列はすぐに対応するDOMノードに変換され、他のノードに追加されます。への複数の呼び出しを含むHTML文字列を作成することはできません.append
。
これは、コードの修正バージョンです。
// jQuery parses the HTML string and creates a UL element
var $ul = $('<ul />');
// equivalent to
// var $ul = document.createElement('ul'); <- NOTE: not HTML, it's a node name
for (var i in usersLst) {
// jQuery parses the HTML, creates a LI element and appends it to the list
$ul.append('<li>' + usersLst[i][1] + '</li>');
// equivalent to
// var li = document.createElement('li');
// li.appendChild(document.createTextNode(usersLst[i][1]));
// $ul.appendChild(li);
}
// append the populated UL element to an existing node:
$(div).append($ul);
// equivalent to
// existingElement.appendChild($ul);