2011-07-05 15 views
1

http://jsfiddle.net/mjmitche/gq6En/78/有効なjQueryのコードが動作しない - 親/子問題

をこのフィドルでは、あなたは白い箱の中にオレンジ色のボックスをドラッグすると、ライム、ブラックボックスがフェードアウトします。しかし、(明らかに有効な - JSLintによると)コードがそれを指示するにもかかわらず、石灰の箱はフェードインしません。

1)ブラックボックスの子であり、ブラックボックスが消えてしまっているため、石灰のボックスがフェードインしませんか?

2)親ブラックボックスを表示させずに子石灰ボックスを再表示させる方法はありますか?

+1

BTWコードは構文的に有効であり、期待されているか望まれているものの近くにはありません。私のコードはこれを常に行っているようです:) – jensgram

答えて

2
  1. はい、#blackは、これらの中ですべての子孫—に継承display: none;#limeを持っています。

  2. はい、#black要素の外にそれを再接続するとします。 決しては、目に見えない要素の子孫である場合に表示されます。

Demoは&hellipを置き換えます。  ……………………

$("#lime").insertAfter("#black").fadeIn(1000); // Reattach after `#black`. This will manipulate the DOM! 

…ポイント1及び2 :)

+0

ありがとうございます。ですから、DOMがこのように操作されると、その子は親から永遠に独立していますか?あとでもう一度子供にするために.appendを使わなければならないのですか? – Leahcim

+0

@Micahelここでお手伝いしましょう。あなたは '$( '#black')を発行することでこれを行うことができます:append($( '#lime'));' '.prepend()'を使用しますifあなたはそれを最初の子供にしたかったのです。 – Nic

+0

@Michaelはい、@meleeが言ったことをしてください:)私は昨日の夜はコンピュータの近くにいませんでした。アドバイス:DOMを使用して遊ぶときは、インスペクタ(Firefox用のFirebugなど)を使用してください。それは常にあなたに現在の状態を伝えます。 – jensgram

2

1)はい - あなたは第2セレクタへ#black DIVを加算することによってこれをテストすることができる:

drop: function (event, ui) { 
      $(this) 
       .addClass ("ui-state-highlight") 
       .find ("p") 
       .html("dropped"); 
      $("#lime, #black").fadeOut(1000, function(){ // Only #black needed here 
      $("#lime, #black").fadeIn(1000); // Only #black needed here as well 
      }); 

これは残念ながら、バック(黒と共に#limeをもたらします)。

2.)あなたが配置しようとしているロジックのためにこれをどのように攻撃するのかはわかりませんが、#black属性を何も変更しないでくださいそれは透明または何か)とそれを消えて、それが消えた外観を与える?

+0

回避策の良いアイデア、ありがとうございますが、私は親/子の問題をエスケープする方法としてinsertAfterを使った他の答えに受け入れられた答えを与えます。再度、感謝します。 – Leahcim

+0

@マイケルは理解できる!少なくともあなたはオプションがあります:) – Nic

1

を証明するために私はあなたが戻ってで#blackを退色せずにそれを行うことができるとは思いません。 #blackのバックグラウンドをnoneに変更してから、フェードアウトして#pinkをフェードアウトさせることはできます。 私はあなたのフィドルを編集しました/

これはあなたが探しているものです。 http://jsfiddle.net/gq6En/93/

+0

o.k、ありがとう、素晴らしいアイデア!私はそれを使用しますが、親から子供を解放する方法があります。上記のjensgramによる回答を参照してください。 – Leahcim

関連する問題