解決方法をご教授ください。できれば、ソースをいただけるとありがたいです。
当方初級レベルです。
■実現したいこと
1.jQueryでclassを付加した要素を生成
2.そのclassをセレクタで指定し、クリックイベントを発生させる
※詳細はコメント欄のソースを参照してください
■問題
上記の2番がうまくいっていません。
1番はうまくいっているようです。
以下で配布されているブックマークレットで、
指定したい要素".test"を検索すると、期待通りの箇所がヒットします。
http://semooh.jp/jquery/ref/cont/selectors/
■問題が発生しているソース
表示されている文字列をクリックすることによって、
水平線の上と下で移動することを期待して書きました。
コメント欄に記載しましたが、インデントがつぶれてるかもしれません。お手数かけます。
問題となっているのは多分cloneをappendしている点で、cloneで作られた要素は属性やタグの中身はコピーされますがイベントはコピーされない為、コピーされた要素ではclickで何も起きないんだと思います。
これを解決するにはクリックイベントとの登録に click 関数を使うのではなく、live関数を使うのが簡単で良いでしょう。
clickイベントの登録箇所を以下のように修正してみてください。
$(".test").live("click", function(){ : });
$(this).remove(); $(this).clone(true).appendTo(text);
この箇所で、要素をコピーする前に消しちゃっているようです。
順番を入れ替えてみたら、クリックするたびに上下に行ったり来たりするようになりました。
$(this).clone(true).appendTo(text); $(this).remove();
お礼が遅くなって申し訳ありません。
回答ありがとうございました。
思った通りの挙動になりました。
また、何かあった際はよろしくお願いいたします。
問題となっているのは多分cloneをappendしている点で、cloneで作られた要素は属性やタグの中身はコピーされますがイベントはコピーされない為、コピーされた要素ではclickで何も起きないんだと思います。
これを解決するにはクリックイベントとの登録に click 関数を使うのではなく、live関数を使うのが簡単で良いでしょう。
clickイベントの登録箇所を以下のように修正してみてください。
$(".test").live("click", function(){ : });
お礼が遅くなって申し訳ありません。
回答ありがとうございました。
思った通りの挙動になりました。
イベントのコピーについての知識がなかったので調べてみたいと思います。
また何かあった際はよろしくお願いいたします。
removeとcloneしている行を逆にすれば希望の動作になるかな。
ただ上下させるだけなら毎回生成しなくてもいいのでは。
$(function () { $(".test").click(function(){ var self = $(this); (self.parent().attr('id') == "first") ? self.appendTo('#second') : self.appendTo('#first'); }); });
お礼が遅くなって申し訳ありません。
回答ありがとうございました。
思った通りの挙動になりました。
また、何かあった際はよろしくお願いいたします。
お礼が遅くなって申し訳ありません。
回答ありがとうございました。
思った通りの挙動になりました。
イベントのコピーについての知識がなかったので調べてみたいと思います。
また何かあった際はよろしくお願いいたします。