2

次のように追加された.data()を含むいくつかの子ノードを持つdocumentFragmentがあります。


myDocumentFragment = document.createDocumentFragment();
for(...) {
  myDocumentFragment.appendChild(
    $('<a></a>').addClass('button')
      .attr('href', 'javascript:void(0)')
      .html('click me')
      .data('rowData', { 'id': 103, 'test': 'testy' })
      .get(0)
  );
}

documentFragmentをページのdivに追加しようとすると:

$('#div').append( myDocumentFragment );

私はデータにうまくアクセスできます:

alert( $('#div a:first').data('rowData').id ); // alerts '103'

しかし、cloneNode(true)を使用してノードのクローンを作成すると、ノードのデータにアクセスできなくなります。:(

$('#div').append( myDocumentFragment.cloneNode(true) );
...
alert( $('#div a:first').data('rowData').id ); // alerts undefined

他の誰かがこれを行ったか、回避策を知っていますか?行のデータをに格納できると思いますjQuery.data('#some_random_parent_div', 'rows', [array of ids])が、それでは、各行でデータをすぐに/簡単に利用できるようにするという目的が少し損なわれます。

jQueryがdocumentFragmentsを使用していることも読みましたが、正確にどのように、どのメソッドで使用されているのかわかりません。誰かがそこにこれ以上の詳細を持っていますか?

再編集:.clone(true)


$(globalObj).data('fragment', { frag: $(mydocumentFragment).clone(true) });

$(myDocumentFragment).clone(true).appendTo('#div');

alert( $('#div a:first').data('rowData').id ); // undefined
4

1 に答える 1

1

を行うときはjQueryオブジェクトを作成していますが、フラグメントに追加するために使用および使用する$('a')ときはそれを残しています。したがって、フラグメントでネイティブを使用すると、jQuery はそれを認識しないため、データを管理しません。get(0)appendChild.cloneNode(true)

あなたがやっていることのほとんどにjQueryを使用している限り、documentFragmentを捨てて、a要素をjQueryオブジェクトに詰め込むだけclone()です。

この場合、フラグメントを使用しても何も得られないと思います。

于 2010-05-14T02:15:39.017 に答える