たとえば、クリックなどのイベントのパラメーターとして、DOM 要素を取得したとします。
$(document).click(function() {
myElement = $(this);
});
myElement がまだ DOM にあることを後で確認するにはどうすればよいですか? 保存された要素と現時点での DOM の状態をまだ参照しているため、.length などは使用できません。
たとえば、クリックなどのイベントのパラメーターとして、DOM 要素を取得したとします。
$(document).click(function() {
myElement = $(this);
});
myElement がまだ DOM にあることを後で確認するにはどうすればよいですか? 保存された要素と現時点での DOM の状態をまだ参照しているため、.length などは使用できません。
要素の親を確認できます:
function isInDom(obj) {
var root = obj.parents('html')[0]
return !!(root && root === document.documentElement);
}
if(isInDom(myElement)) {
...
}
これがフィドルです:http://jsfiddle.net/vnxhQ/7/
私がこれまでに見た唯一の信頼できる方法は、要素が内部にあるかどうかを確認することですdocument.getElementsByTagName('*')
function isInDoc(element)
{
var elements=document.getElementsByTagName(element.tagName);
for(var i=0;i<elements.length;++i)
{
if(elements[i]===element)return true;
}
return false;
}
デモ: http: //jsfiddle.net/doktormolle/hX8eN/
<edit>
Node.contains()はすべての主要なブラウザーでサポートされているようですので、最終的にこれを提案します。
if(document.documentElement.contains(myElement))
デモ: http: //jsfiddle.net/doktormolle/LZUx3/
jQueryオブジェクトの文書化されていないプロパティを使用して、一意のIDを使用することを条件に.selector
、要素がまだDOMにあるかどうかを確認できます。明らか
http://jsfiddle.net/mblase75/CC2Vn/
$two = $('#two');
console.log($($two.selector).length); // 1
$two.remove();
console.log($($two.selector).length); // 0
jQueryオブジェクトのセレクターを取得する方法の詳細については、この質問を参照してください。jQueryオブジェクトには、含まれるDOM要素が一意に記述されている場合とされていない場合があります。
要素がまだDOMに存在するかどうかをテストするには、DOMを再度クロールする必要があります。
// store it in some shared scope
var myElement;
$(document).click(function() {
myElement = $(this);
});
// sometime later...
if ($('#' + myElement.attr('id')).length > 0) {
// it still exists
} else {
// it no longer exists
}
ただし、これを機能させるには、クリックした要素すべてにid
sが必要です。代わりに、クラスまたはその他のセレクターを使用できます。
編集:特定のDOM要素の一意のセレクターを取得する方法については、この質問を参照してください。
争いに何かを追加するだけです:
これは実際には、一般的な DOM ツリーから削除された要素を格納する可能性のある別の body 要素を作成するという Dr.Molle のコーナー ケースに合わせて微調整された Inferpse の回答です (または、もちろん、要素が最初から DOM に存在しなかった可能性もあります)。 Inferspeの答えは、要素自体ではなく、jQueryでラップされたオブジェクトを取ります。
function isInDom(jqobj) {
var someBody = jqobj.parents('body');
return someBody.length > 0 && someBody.get(0) === document.body;
}
私はそれを打破する方法を理解するのに苦労していることを認めなければなりません.
編集: そうそう... jsFiddle: http://jsfiddle.net/vnxhQ/5/
編集 II: もちろん、リンクやスクリプト要素 (head
ではなくbody
、
これは、可能な「クリック可能な」要素のIDが設定されていることを前提としています
var idRef;
$(document).on('click', function() {
idRef = this.id;
});
後で..
var exists = document.getElementById(idRef).length > 0;