2009-07-08 19 views
2

本質的に:アイテムをクローンするたびに、それらのアイテムのdata()値が失われます。"move"のjQueryアイテムデータを失う

ストーリー:私は、JSONオブジェクトから動的に入力された項目を格納する3つの列テーブルを持っています。これらの各アイテムには、私が使用するデータ値が設定されています。

​​

を「L1」キーとこれらの作業罰金として格納されたJSONデータを使用しますが...これらの項目のクリックイベントが、私はこれらの項目は、テキストボックスを使用してフィルタリングすることができるようにそこにありますと ":not(:contains( 'text'))"セレクタがあります。

$(".subMenuItem:not(:contains('" + str + "'))").remove(); 

けど...私は残りをクローニングすることにより、3つの列にアイテムを訴えるしようとして列が不均一にすることができ、3つの列を持っているので。

var items = $(".subMenuItem").clone(true); 
$("#subMenuContent td").empty(); 
addItemsToColumn(items); 

これを実行した後、クリック機能は、以前にワークルしたとしても、data()値を検出しなくなりました。

​​

アイテムに格納されているdata()値を保持するにはどうすればよいですか?

 // Need to set the expando to null on the cloned set if it exists 
     // removeData doesn't work here, IE removes it from the original as well 
     // this is primarily for IE but the data expando shouldn't be copied over in any browser 
     var clone = ret.find("*").andSelf().each(function(){ 
      if (this[ expando ] !== undefined) 
       this[ expando ] = null; 
     }); 

あなたは、データをつかむ必要がありますクローンにそれを再度追加:

答えて

4

はjQueryのcloneメソッドは、明示的にクローン化された要素(jQueryのV1.3.1のライン301)からのデータ()の値を削除します要素。 jQueryのexpandoプロパティ名はパブリック変数ではありません。ここで

+0

は、あなたがデータをコピー方法の例です: "subMenuItem" VARデータ= $ .MAP($()関数(elemは){ \tリターン$(elemは).dataセクション( 'L1 ') }); var items = $( "。subMenuItem")。clone(true).each(function(i){ \t $(this).data( 'L1'、data [i]) }); $( "#subMenuContent td")。空(); addItemsToColumn(items); – howardr

+0

これらのコメントによると、IEは元のデータも削除します。私はそれを読んでいますか? – webwires

+0

これは非常にうまくいきました。 – webwires

関連する問題