8

私が知る限り、 document.getElementById('myId') は、ドキュメント内に既に存在する HTML 要素のみを検索します。JS を介して新しい要素を作成したとしますが、まだドキュメント本文に追加していません。getElementById で通常行うように、ID でこの要素にアクセスする方法はありますか?

var newElement = document.createElement('div');
newElement.id = 'myId';
// Without doing: document.body.appendChild(newElement);
var elmt = document.getElementById('myId'); // won't work

そのための回避策はありますか?(この特定の要素への参照を保存したくないことを伝えなければなりません。そのため、ID を介してアクセスする必要があります)

ありがとうございました!

4

4 に答える 4

5

ドキュメントの一部でない場合は、 を使用して取得することはできませんdocument.getElementByIdgetElementByIdDOM ルックアップを行うため、要素がツリー内になければ検出されません。フローティング DOM 要素を作成した場合、それはメモリ内に存在するだけであり、DOM からアクセスすることはできません。表示するには、DOM に追加する必要があります。

後で要素を参照する必要がある場合は、参照を別の関数に渡すだけです。JavaScript のすべてのオブジェクトは参照によって渡されるため、別の関数内からフローティング DOM 要素を操作すると、コピーではなく元の要素が変更されます。

于 2009-07-02T23:20:14.680 に答える
0

getElementById はドキュメント オブジェクトのメソッドです。ドキュメントにないものは返されません。

参照を保存しないことについてですね。ID によって空気から魔法のようにそれを引き出すことができれば、空気はそれへの参照になります。

于 2009-07-02T23:13:44.740 に答える
0

作成した場合は、オブジェクトを他の関数に渡して直接アクセスするだけですか?

function createDiv()
{
  var newElement = document.createElement('div');
  doWorkWithDiv(newElement);
}

function doWorkWithDiv(element)
{
  element.className = 'newElementCSS';
  element.innerHTML = 'Text inside newElement';
  addToDoc(element);
}

function addToDoc(element)
{
  document.body.appendChild(element);
}
于 2009-07-02T23:21:48.157 に答える