2011-07-15 9 views
11

要素が$('div').lengthであるかどうかを確認できますが、.remove()を使用して要素が破棄された場合でも.lengthにdivが存在します。それが実際に存在するかどうかはどうすればわかりますか?JQuery: '.remove()'の横に要素が存在するかどうかをチェック

if ($('div').length) { 
    alert('yes') 
} else { 
    alert('no') 
} 
+0

Err ..あなたが何を意味するのか正確にはわかりません。 '.remove()'を使うと、要素はDOMから削除されます。 Lengthは期待される結果を報告します:http://jsfiddle.net/TmPBC/ –

+0

これは、ページにdivがある限り、「はい」を警告します。 idを使って、正確な要素が削除されたかどうかをテストすることができます。 – Paulpro

+0

$( 'div')が例でした。ページ全体にdivがあるかどうかを調べるためのテストは行っていませんでした。 – gavsiu

答えて

6

それは親があるかどうかをテスト:

if ($element.parent().length) { alert('yes') } 
else { alert('no') } 

か、DOM要素への参照がある場合:

明らか
if(element.parentNode) { 
    // yes 
} 

を、要素のためのこの唯一の作品は、あなたが既に持っているがへの参照。

FWIWでは、要素自体はまだ存在しますが、DOMツリーの一部ではありません。

+0

'$ element'の親要素がDOMから削除されている場合、これは機能しません。たとえば、 '$ element.parent()。remove()'です。 '$ element'がDOMツリーにないのに、' $ element.parent()。length'はまだ1です。 – gilly3

+0

@ gilly3:まあ、質問で言及されているように、要素に対して.remove()が実行されたと仮定します。とにかく、あなたの解決策+1が、私は 'html'ではなく' body'を探すだけで十分だと思います。 –

6

存在すると、あなたはそれがdomに存在するかどうかを確認したいのですか?

var $myDiv = $(".myDiv"); 
$myDiv.closest("html").length; // returns 1 
$myDiv.remove(); 
$myDiv.closest("html").length; // returns 0 

または使用.is("html *"): "HTML" は祖先であるかどうかを確認してください。これは便利であるブール値を返します:

var $myDiv = $(".myDiv"); 
$myDiv.is("html *"); // returns true 
$myDiv.remove(); 
$myDiv.is("html *"); // returns false 
+0

パフォーマンス面で最も効率的なのはどちらですか?うーん。 – jfroom

+0

もし違いがあるなら、最も効率的なのは '.closest()'でしょう。 '.is()'がどのように実装されているかによって '.closest()'とほぼ同じくらい効率的になるかもしれませんし、もっと悪いこともあります。 – gilly3

0

あなたは要素と要素が取り除かれた後、あなたはこのように確認することができますを削除する前に、要素の親を取得することができます!もちろん、要素の

var parent = $(element).parent(); 
    $(element).remove(); 

    if(parent.children(element)) { alert('yes'); } 
    else { alert('no'); } 

要素の両親のいずれかが削除された場合、これはまだ(要素自体はまだ親を持つことになり、その場合には)動作するいくつかのjqueryのセレクタ

4
if (!$foo.closest('html').length) { 
    //Element is detached 
} 

だろう。

私はthis answerを引用しています。

関連する問題