0

3 つの異なる入力を持つフォームがあります。2 つのテキストと 1 つのサブミット。このフォームの html は、javaScript 変数に格納されますvar form。ユーザーがボタンをクリックすると、次のコードが実行されます。

$('#content').html(form);

これは期待どおりに機能します。次に、ユーザーがボタンをもう一度クリックすると、#content要素の html と が比較されvar formます。フォームのコンテンツを含むように要素を設定しただけなので、true が返されると予想されますが、false が返されます。

#content要素から html を取得すると、挿入したときとは少し異なることがわかりました。入力タグごとに、type属性が最初から最後に移動されます。あれは:

<input type="text"... /> --> <input ...type="text" />

当然のことながら、それらを比較しようとすると、false が返されます。しかし、なぜそれが変数にあるのとまったく同じようにhtmlを挿入しないのかという疑問が生じますか?

4

2 に答える 2

2

これはおそらく jQuery によるものではありません。これがブラウザです。text/html が DOM ノードに変換されると、それらのノードをテキストに戻すことはブラウザに依存し、仕様では定義されていません。

<form>タグの内容が作成時と同じかどうかを比較したい場合、そのテキスト形式を比較することはできません。結局のところ、ブラウザーによって解析される<form class="foo" id="bar"><form id="bar" class="foo">、同一の DOM ノードが生成されます。

value入力要素のように、変更が予想され、明確に定義された状態を持つ属性のみを比較する必要があります。

于 2012-10-29T07:27:37.250 に答える
1

.html(form)実行されると、ブラウザーは基になるドキュメント オブジェクト モデル (DOM) に変更を加えます。引数として渡された HTML の記録は保持しません。

Web ページを形成する HTML についてもまったく同じことが当てはまります。DOM ノードに解釈された後は、ページが更新されない限り、HTML 自体はページの存続に関与しません。

によって返される文字列 string.html()は完全に合成です。

いいえ、返される文字列が元の変数.html()と同一であるとは思わないでしょう。form

于 2012-10-29T07:37:59.983 に答える