3

少なくとも Firefox ではcloneNode(true)、動的またはユーザーによって変更された textarea または select 要素で使用する場合、valueプロパティは保持されません (動的な変更を反映するように DOM が変更されることもありません) が、入力要素では、valueプロパティまたはユーザーによる変更です。 DOM に反映されます (したがって、cloneNode の呼び出し時に保持されます)。なぜこのような区別があるのでしょうか?

アップデート:

  1. 私は質問するつもりでした: この動作はどこかの仕様で規定されていますか? (またはバグレポートで詳しく説明されていますか?)
  2. サンプルはhttp://jsfiddle.net/9RSNt/1/にあります。
4

1 に答える 1

3

textareaselects の値はノードの内容によって決定されるため、違いが生じるのではないかと思います。コントロールの値を変更すると、DOM プロパティは変更されますが、ノードのコンテンツは変更されないため、それらを複製すると、複製には元の要素の値が含まれます。

change イベントでノードのコンテンツを更新することで、これを回避できます。

// textarea
$("textarea").change(function() { $(this).text($(this).val()); });

// select
$("select").change(function() {
    var sel = $(this).children(":selected");
    $(this.children).not(sel).removeAttr("selected");
    sel.attr("selected", "selected");
});

http://jsfiddle.net/emr2w/8/

編集:

これに関する Mozilla のバグ ケースは多数ありますが (解決されたものもあれば、解決されていないものもあります)、実際の仕様についての言及はほとんどありません。valuea の後のプロパティの動作はcloneNode()、仕様で明確に定義されていない灰色の領域のようです。結局のところ、 の目的はDOM ノードcloneNode()のクローンを作成することであり、必ずしもオブジェクトの状態を複製することではありません。

https://bugzilla.mozilla.org/show_bug.cgi?id=197294
https://bugzilla.mozilla.org/show_bug.cgi?id=230307
https://bugzilla.mozilla.org/show_bug.cgi?id= 237783

于 2014-01-11T08:05:32.440 に答える