LoginSignup
2
2

More than 5 years have passed since last update.

jQueryでbodyにフラグメントを挿入済みかどうか調べるには?

Posted at

jQueryでは

var a = $('<div><p>test</p></div>');

このようなHTMLの断片を本文に挿入せずに
フラグメントの状態で
offset位置などを取得するとおかしなことになりますよね。
(実際に起こりがちなのはDOMそのものが差し替わっていて参照しているものが違うとか)

このDOMが本文にあるかの
状態を調べる時の一番簡単なものってなんでしょうか?。
思いつくあたりを書いてみました。

var a = $('<div><p>test</p></div>');
var $is_contents = $('html').find(a);
if($is_contents.length>0){

}else{
    //エラー処理
}
var a = $('<div><p>test</p></div>');
var $is_contents = a.parents('body');
if($is_contents.length>0){

}else{
    //エラー処理
}

あとDOM内に適切なプロパティ持ってるんじゃ無いかと調べてみるとparentNodeがありました。parentElementもあります。

var a = $('<div><p>test</p></div>');

if(a.get(0).parentNode){

}else{
    //エラー処理
}

一応こんな感じでできそうなんです、ブラウザ実装状況に問題がなければ。

offset取得やアニメーションなどにはparentNodeがnullだった場合は常にエラーを投げるようにしてもいいかもですね。ただ念のためDocumentFragmentも処理に入れないといけない?

var a = $('<div><p>test</p></div>');
var parent =a.get(0).parentNode;
if(parent && parent.nodeType !== 11){

}else{
    //エラー処理
}

parentNodeだとDOMの位置に依存するので意図通りの使い方は限定されそうですが無ければエラー投げれるのでその点では一番使いやすそうです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2