Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript getElementById是函数内部但来自外部的对象_Javascript_Getelementbyid - Fatal编程技术网

Javascript getElementById是函数内部但来自外部的对象

Javascript getElementById是函数内部但来自外部的对象,javascript,getelementbyid,Javascript,Getelementbyid,我一直在学习关于函数、返回、id和所有东西的非常简单的东西,所以我遇到了另一个看起来很简单的问题,但我无法理解为什么会发生这种情况。检查此代码: function test() { var text = document.createTextNode("Hello"); text.id = "t"; } var whatIjustwrote = window.document.getElementById("t"); alert(whatIjustwrote);​

我一直在学习关于函数、返回、id和所有东西的非常简单的东西,所以我遇到了另一个看起来很简单的问题,但我无法理解为什么会发生这种情况。检查此代码:

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


var whatIjustwrote = window.document.getElementById("t");
alert(whatIjustwrote);​
getElementById
是否限制只查找全局项?如何将警报输出到函数内的文本节点

谢谢你的评论。最近几天,我在这里问事情,我学到了很多


getElementById
只搜索元素节点。您确实创建了一个文本节点,它既没有属性也没有id——您只是向JS对象添加了一个自定义属性。此外,您没有将节点附加到文档中,因此在DOM树中找不到该节点

你可能想读,或者甚至是(特别是)

()

首先,将只返回一个元素,您正在创建一个文本节点

其次,它将只返回已添加到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
getElementById是否限制只查找全局变量 物品

答案是否定的。首先,您必须定义全局项。任何附加到DOM的东西实际上都是全局的,对于全局javascript对象,浏览器只有一个窗口。您正在创建一个函数,但从未执行它

此外,文本节点实际上不能具有id或任何其他属性。为此需要一个元素,因此即使执行该函数,也会得到null。另外,创建节点时不会附加到
DOM
,因此即使该节点不是文本节点,也无法访问它


我已经更新了你的。

我想到的几点

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);

>>如何将警报输出到函数内的文本节点答案是否定的??谢谢你,非常有教育意义的回答,解释了我不明白的地方。@James:你应该给新手看:-)我一定会看的!DOM是JS中最让我困惑的部分之一(我对编程基本上是新手),但我意识到它的重要性。很好,不客气。我发现Chrome开发工具控制台(点击Ctrl-Shift-I)非常有用。在IE中按F12键,在opera中按Ctrl-Shift-I键-不确定FF或Safari。控制台让事情变得越来越简单。那里有很多古怪的视频,让你也能领略一下。祝你在javascript土地上玩得愉快!:)
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);