0

関数、戻り値、id、その他すべてについて非常に単純なことを学び続けているため、単純に見える別の問題に遭遇しましたが、なぜそれが起こるのか理解できません。このコードを確認してください:

function test() {
    var text = document.createTextNode("Hello");
    text.id = "t";
    }


var whatIjustwrote = window.document.getElementById("t");
alert(whatIjustwrote);​

getElementByIdグローバル アイテムのみを検索するという制限はありますか? そのアラートを関数内のテキスト ノードに出力させるにはどうすればよいでしょうか?

コメントありがとうございます。ここ数日、ここで質問して、私はかなり多くのことを学んでいます!

JSFiddle

4

4 に答える 4

5

まず、要素getElementByIdのみを返し、テキストノードを作成しています。

次に、DOM に追加された要素のみを返します。作成したノードは DOM に追加されないため、存在する可能性があっても見つかりません。

最後に、実際にはtest関数を呼び出さないため、テキスト ノードはメモリ内に作成されません。

実際に動作していることを示す更新されたフィドルを次に示します。getElementById

function test() {
    var text = document.createElement("span"); //Create an element
    text.innerHTML = "Hello";
    text.id = "t";
    document.body.appendChild(text); //Add it to the DOM
}

test(); //Invoke the function (so the element actually gets created)
var yourElement = document.getElementById("t"); //Get reference to element
于 2012-11-07T12:03:48.507 に答える
2

getElementById要素ノードのみを検索します。属性も ID も持たないテキスト ノードを作成しました。カスタム プロパティを JS オブジェクトに追加しただけです。また、ノードをドキュメントに追加しなかったため、DOM ツリーで見つけることができませんでした。

DOM の紹介 (MDN)quirksmode.org の紹介、またはW3 標準そのもの(特に紹介セクション)を読みたいと思うかもしれません。

function test() {
    var elem = document.createElement("span"); // Create an element
    var text = document.createTextNode("Hello"); // Create a textnode
    elem.appendChild(text); // add text to the element
    elem.id = "t"; // assign id to the element
    document.body.appendChild(elem); // Add it to the DOM
}
test();

var yourElement = document.getElementById("t"); // Get the element from the DOM
alert(yourElement.textContent); // alerts "Hello"
// you also could have alerted yourElement.firstChild.data - the content of the 
// textnode, but only if you had known that yourelement really has a firstchild

( jsfiddle.net のデモ)

于 2012-11-07T12:03:35.450 に答える
1

気になる点をいくつか。。

1) textNode に id 属性を与えることはできません (実際には id という名前の新しいメンバー変数を与えています) 2) 要素を見つけるには、ドキュメントの DOM に存在する必要があります

代わりにこれを行います:

var mSpan = document.createElement('span');
mSpan.id = 't';
mSpan.appendChild( document.createTextNode('Hello') );
document.body.appendChild(mSpan);

var whatIjustwrote = window.document.getElementById("t");
alert(whatIjustwrote.innerText);
于 2012-11-07T12:08:31.727 に答える
1

getElementById には、グローバル アイテムのみを検索するという制限がありますか?

答えはノーだ。まず、とにかくグローバル項目を定義する必要があります。DOM にアタッチされているものはすべて、実際にはグローバルであり、グローバルな JavaScript オブジェクトに関しては、ブラウザーの場合、ウィンドウは 1 つだけです。関数を作成していますが、それを実行することはありません。

さらに、テキスト ノードは実際には ID やその他の属性を持つことはできません。これには要素が必要なので、関数を実行しても null になります。また、ノードの作成は にアタッチされDOMないため、テキスト ノードでなくてもアクセスできません。

あなたのフィドルを更新しました。

于 2012-11-07T12:04:46.233 に答える