0

要素を DOM に挿入しましたappendTo()。追加された要素の内部からDOMをトラバースして、追加された要素が追加された要素への参照を取得しようとしています。しかし、これは私にとってはうまくいかないようです。parent()結果をコンソールに出力することで、いくつかのトラブルシューティングを行いました。1 レベル戻るたびにparent()、追加された要素の親に到達するまで結果が得られます。その時点parent()で空のセットを返します。

この問題を説明するコードの例を次に示します。

  <div class="menu">
     <span class="like current"></span>
     <span class="done"></span>
     <span class="add"></span>
     <span class="report"></span>
     <div class="panel">
        <div class="panel-content">
           <p>This function is not yet implemented</p>
           <p>
              <a class="cancel" onclick="cancel_panel(this)">Cancel</a>
           </p>
        </div>
     </div>
  </div>

div.panelに追加されdiv.menuappendTo()div.panel-content追加されましdiv.panelappendTo()

私が達成しようとしているのは、キャンセルリンクをクリックしてクラスcurrentを削除することです。span.like

私はもう試した:

 $(elem).closest("div.menu").children("span.current").removeClass("current");

(ここで、elem はaキャンセル リンクの要素への参照です)

しかし、うまくいきません。$(elem).closest("div.menu")代わりに空のセットを返しますdiv.menu

さらにトラブルシューティングを$(elem).parent()行うと、pタグへの予想される参照が表示され、 へ$(elem).parent().parent().parent()の予想される参照が表示されdiv.panelます。しかし$(elem).parent().parent().parent().parent()、空のセットを返します。

何が起きてる?追加された要素は、DOM をトラバースするときに実際の要素と同じように応答しませんか? jqueryはネストされた追加でプロットを失いますか? への参照を取得するにはどうすればよいdiv.menuですか?

4

4 に答える 4

1

ここでスクリプトを使用して問題を再現しようとしました:

$(function() {

    var elem = $('<a class="cancel">Cancel</a>')
        .click(cancel_panel)
        .appendTo($(".panel-content").children().last());


    function cancel_panel() {                 
        $(elem).closest("div.menu")
        .children("span.current")
        .removeClass("current");
    }     
});

&上記のHTML。しかし、次の問題は見つかりませんでした:

$(elem).closest("div.menu").children("span.current").removeClass("current");

それを見て、問題が他の場所にあるかどうかを確認してください。

于 2013-07-05T04:22:40.580 に答える
0
$(elem).parents().filter(".menu").children("span.current").removeClass("current");

ここでテストを行ったところ、完全に機能しているようです。

于 2013-07-05T04:22:50.587 に答える
0

「現在のような」クラスを見つけて、その要素で「好き」に名前を変更してみてください

于 2013-07-05T04:07:51.270 に答える
0

問題が解決しました。追加された要素のjquery DOMトラバーサルはうまく機能します。hangerpain の jsfiddle デモは、質問に含めたコードの一部に問題がないことを証明しました。それは別のものでした。コードを再調査したところdiv.panel、DOM を上にたどろうとする前に DOM から削除していたことがわかりました。

于 2013-07-05T04:43:32.637 に答える