3

アンカーを作成し、データを保存してdiv要素に追加する関数にこのコードがあります

var x = $("<a class='randomclass'></a>");
x.data('foo', 'bar');
console.log(x.data());
...
$("<div></div>").append(
    x
);
...

そのデータを取得するイベント ハンドラーを作成しようとすると、未定義であることが示されます。要素にアクセスするさまざまな方法を試しましたが、それらはすべてデータを返しません

$("body").on("click", "a.randomclass", function (event) {
   event.preventDefault();
   console.log( $(event.target).data('foo') );
   console.log( $(event.currentTarget).data('foo') );
   console.log( $(this).data('foo') );
});

これがそうである理由は何ですか?

編集: タイプミスを修正しました。

4

2 に答える 2

4

わかりました、私は答えを見つけたと思います。

問題は、.html() を使用して要素のマークアップを取得し、それを関数に渡したことです。

.html() はその要素の文字列表現を取得するだけなので、その要素のデータは失われることを意味すると思います。

于 2012-10-31T12:56:42.983 に答える
2

私にはうまくいくようです。jsフィドル

var x = $("<a class='randomclass'>test link</a>");
x.data('foo', 'bar');
console.log(x.data());

$("body").append(x);

$("body").on("click", "a.randomclass", function(event) {
    event.preventDefault();
    console.log($(this).data());
});​
于 2012-10-31T12:31:56.910 に答える