いつものしらべてもでてこない

調べた事を書きます

GreasemonkeyでcreateElementした要素にappendChild出来ない。Javascript

GreasemonkeyでcreateElementした要素にappendChild出来ない。Javascript

出来ません。

 

エラーメッセージはそんな関数は知らないと言っている。

documentオブジェクトに追加していない内はdocumentオブジェクトではないと言う事だと思う。

 

 IEならcanHaveChildrenで調べられるんだろうけれどFirebugのエラーコンソールにappendChildなどと言う関数は無いと書いてあるので方法が悪いか出来ないのだと思う。

 

ではどうするのかと言うとgetElementsByTagName()を使う。

get Element s By Tag Name ('*')

これを使えば任意のDOMオブジェクトを拾ってこられるので目的のIDのオブジェクトを取得することが可能。勿論classやattributeでも大丈夫。

 

var object = 作った・拾ってきたDOMのオブジェクト

var id = 'title';

var list = object . getElementsByTagName('*');

for( var i = 0; i < list . length; i++ ) {

  if( list[i].id == id ) {

    return list[i];

  }

}

 

これを関数にしてオブジェクトを渡すようにするとdocumentツリーに無くてもgetElementByIdと同じ事が可能になる。

returnでオブジェクトをそのまま渡すと移動してしまって困る場合はcloneすれば良い。

 

classNameを取得する場合は注意が必要で、classNameは複数設定出来るので

" " + list[i].className + " "

の様に半角スペースで囲ってからindexOfかmatchしないと正常に動作しない。

勿論検索対象のクラス名の文字列も同じ様にスペースで括らないと部分一致検索になってしまうので注意。

 

DOM

 

 

追記

別件だが、iframeの場合はiframeが描画された後でないと追加できない様だ。

 

以上。