まず、この問題の背景について話させてください。
ページ内に div があります。この div の右上隅 (または他の場所) に × アイコンがあります (このアイコンはツールヒントを追加します)。このような「クリックして削除」という同様の単語をクリックして、この div に対して delete() のような削除操作を実行します。
その後、問題が発生しました。この div が削除されたため ()、生成されたツールチップに対応する × アイコンも削除されました () が見つかりませんでした。そのため、対応するマウスアウト (おそらく、mouseleave イベント、ブートストラップを参照してください)ソース コードに手がかりが見つかりませんでした。おそらく、これら 2 つのイベントのうちの 1 つがトリガーされず、ツールチップが常に表示されることになります。これはバグです。
言葉で言うことはあまりありませんが、上の図の方が直感的です。
最初にコードを添付します:
[コード部分] (ブートストラップ ファイルと内部の js はローカルにあるため、自分で実行してみたい場合は変更する必要があります):
<!DOCTYPE html><html lang="zh-CN"><head> <title>test</title> <meta charset="utf-8"> <link rel="stylesheet" href="./bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="./font-awesome/css/font-awesome.min.css"> <script src="./bootstrap/js/jquery-1.11/jquery.min.js"></script> <script src="./bootstrap/js/bootstrap.min.js"></script></head><body> <div style="width:70%;margin:50px auto;height:300px;"> <a id="test01" href="javascript:;" data-toggle="tooltip" title="反馈错误" data-placement="top" data-container="body"> <span class="fa fa-bug"></span> </a> <a id="test" href="javascript:;" data-toggle="tooltip" title="点击移除" data-placement="top" data-container="body"> <span class="fa fa-times"></span> </a> </div> <script> $("[data-toggle='tooltip']").tooltip(); $("#test").on("click",function(){ var $this = $(this); $this.remove(); $(".tooltip.fade.top.in").remove();//这行代码是我个人用来解决这个问题而添加的 }) </script></body></html>
Firefox、ページエフェクトと対応するコード (上に添付したコードよりも重いように見えますが、より直感的です)
対応するアイコンの上でマウスをクリックします (ブートストラップによって提供されるスタイルと JS を使用してツールチップが追加されています)フレームワーク))、同時にツールチップに対応する div の ID に注目してください
カーソルを移動した後、対応する × アイコンにフォーカスし、ID を比較すると、ID が変更されていることがわかります
ここで、もともとブートストラップのソースコードを見て、ツールチップのソースコードにどのように書かれているかを見て、問題を根本から解決するつもりでした。
一部見た後、今の経験の浅さには少しストレスを感じました。
しかし、少なくともこの観点からは、生成されるツールチップの ID はランダムであり、ツールチップの非表示は「display:none」の非表示ではなく、「remove()」の非表示です。
追記:私の個人的な理解ですが、それが正しいかどうかはわかりません。誰かが私にアドバイスをくれることを願っています。
以下に示すように、バグを再現してみましょう。
次に、そのコード行のコメントを解除して、私独自の方法で試してみましょう。
上記は私の方法で得られた最終結果です。
× アイコンを削除し、バグ アイコンの上にマウスを移動すると、ツールチップは正常に表示されます。少なくとも、スクリーンショットに関しては、スペースをとりすぎるため、まだアップロードされていません。
追記: この方法を同僚に話しました。ツールチップは完全なセットであるブートストラップによって提供されるフレームワークを使用しているため、変更すると他の場所で問題が発生するのではないかと心配なので、初心者の私は変更します。これはあきらめてください。方法はあります。マスターが指導して、より良い方法を考え出すことを願っています。
【まとめ】
最後に、もう一言。
最初のアイデアは、削除する要素を通じて対応する生成されたツールチップを見つけて、それを非表示にすることでした(表示:なし)。後で、それが見つからないことがわかりました。
IDは変わり続けるから(個人的な推測ですが、ソースコードを読むのがちょっとストレスなので検証はしていません。少なくともIDはランダムに生成されるべきです。ルールがあるとしても、本当にわかりません)、最初の 2 つのスクリーンショットで述べたように、クラスを通じて検索しても一意のラベルが見つからない可能性があります。同じページに他のラベル要素があるためです。ツールチップも使用できます。
ローカルで試してみたところ、主な理由は、生成されたツールチップが削除されていないことです (上記のスクリーンショットで述べたように、「非表示」にする必要がない理由は、ツールチップが display:none をプロンプトするためではなく、直接Remove() このヒント)。
そこで考えたのですが、ツールチップが追加された要素をカーソルが通過するたびに、それに応じてカーソルが削除されるたびに、対応するツールチップがremove()されるようです
そこで、これを思いつきました。メソッド: 対応する要素をremove()した後、ページ上で$("div.tooltip.fade.in")を見つけて、理論的には他の要素に影響を与えません。