Javascript 这些代码之间有什么区别?

Javascript 这些代码之间有什么区别?,javascript,Javascript,这两种从对象获取值的方法。这两种方法的区别是什么?哪种方法最好。这行代码找出整个dom,即整个html页面 alert(val[0].value); alert(window.txtName.value); 下面可能是错误,因为在下面的行中,它是向窗口对象添加textName var val = document.getElementsByName('txtName'); alert(val[0].value); 查看更多信息:在第一个方法中,您将查找其name属性值为txtName的所有

这两种从对象获取值的方法。这两种方法的区别是什么?哪种方法最好。

这行代码找出整个dom,即整个html页面

alert(val[0].value);

alert(window.txtName.value);
下面可能是错误,因为在下面的行中,它是向窗口对象添加textName

var val = document.getElementsByName('txtName');
alert(val[0].value);

查看更多信息:

在第一个方法中,您将查找其
name
属性值为
txtName
的所有元素。从结果中,您将获取第一个匹配项

在第二种方法中,您依赖浏览器通过
窗口
对象上的速记属性
txtName
访问名为
txtName
的元素

正如你所看到的,如果你知道总是只有一个元素,那么一个元素是多余的;另一个是有问题的,如果你不知道总是只有一个元素。而且,在大多数浏览器中,第二种方法甚至不起作用

我不推荐任何访问项目的方法,而是通过id访问document.getElementById('txt').value,当您知道只需要访问一个特定元素时

alert(window.txtName.value);
这是一种错误的方法,它只适用于IE。IE将所有命名元素和IDd元素复制到
窗口的属性中,因此也会复制全局变量,这会导致各种问题。不要依赖这个

这样做的更好方法是:

alert(window.txtName.value);
假设
输入
位于页面的第一个
。您还可以使用表单名称(如果有):

alert(document.forms[0].elements.txtName.value);
也可以缩短时间:

alert(document.forms.someform.elements.txtName.value);
尽管我不建议这样做,因为你的名字和财产之间发生冲突的可能性更大

这:

是可以的,但是由于您已经在输入上有了
id='txt'
,因此使用它比依赖非唯一的
name
属性更简单、更快:

alert(document.getElementsByName('txtName')[0].value);

我怀疑window.txtName会返回什么。@Phillippe是正确的,它应该是
window.txt.value
才能在这里得到任何东西。@Philippe:它会在IE上。IE将
id
name
名称空间合并,并将所有这些符号转储到
window
上@Philippe:是的,真的在
window
正如尼克所说,这是IE非常非常错误的一个例子。也会把getElementById弄得一团糟。IE8在不处于兼容模式时不会这样做,他们已经看到了光明。顺便说一句,
元素的
语言
属性是。这是不正确的。当javascript在浏览器中运行时,“窗口”是“全局变量范围”对象。任何全局变量也是“窗口”对象的属性。@dhali:如果这个答案适合您的需要,请勾选复选标记,这样我们就可以看到这个问题得到了足够好的回答。
alert(document.someform.txtName.value);
alert(document.getElementsByName('txtName')[0].value);
alert(document.getElementById('txt').value);