私はjsでテンプレートを作成する実験をしていて、かなりクールな問題に遭遇しました。ハンドルバーテンプレートがあるとします。次に、コンパイルして出力します
var template =
'<h1>Hello</h1>' +
'<ul>' +
'<li>{{name}}</li>' +
'<li>{{address}}</li>' +
'<li>{{phone}}</li>' +
'</ul>';
var html = Handbars.compile(template)(
{name: 'Austin', address: '42nd St.' phone: '(123) 456-7890'}
);
// Results in
console.log(html);
=> <h1>Hello</h1>
<ul>
<li>Austin</li>
<li>42nd St.</li>
<li>(123) 456-7890</li>
</ul>
ここで、jQueryオブジェクトを作成し、それに基づいて行動したいとします。おそらくulを見つけます。
var $html = $(html)
var x = $html.find('ul'); \\ Or
var y = $('ul', $html)
console.log(x);
=> []
conosle.log(y);
=>
console.log($html)
=> [<h1>Hello</h1>, <ul>...</ul>]
これが示すのは、ルートノードなしで文字列をjQueryifyすると、ノードの配列が取得されることです。
そして、発見はにのみ作用します$html[0]
これを解決できる唯一の方法は、テンプレートにルートノードを含めることですが、jQueryが適切に機能しないという理由だけで、無意味な非セマンティックマークアップを追加するのは好きではありません。
マークアップを変更する代わりに、これをプログラムで解決するにはどうすればよいですか。