HTML DOM元素全局范围

时间:2013-12-24 02:17:12

标签: javascript jquery html

在帮助某人时,我遇到了一个有趣的情况。他们想知道为什么下面的代码有效:

<input type="text" id="myElem" value="Nice" />

$(function() {
    var myElem = $("myElem");
    myProblem();
});

var myProblem = function() {
    var result = myElem.value; //This Works
    result = myElem.val(); //Doesn't Work
}

起初我没有一个好的答案,因为我目前的想法是myProblem方法中的两个语句都应该失败,但只有一个失败。后来我学会了全局浏览器范围内的所有HTML元素。

因此解释如何解决这个问题是因为myElem将作为on load函数中的JQuery对象在范围内,但是当它在myProblem方法中时,JQuery对象将变得超出范围,并且因为浏览器范围全部全局HTML元素,myElem的范围将为HtmlInputElement。

我已经编写了一段时间的代码了,对我来说,只是学习浏览器在全球范围内查找所有HTML元素对我来说都是新闻。

我理解代码示例及其工作原理。我的问题是浏览器有多早就这样做了?这是最新趋势还是我错过了什么?所有浏览器都支持这个吗?

经过一番研究,我发现最新的浏览器支持,但IE6 +等等。

谢谢

2 个答案:

答案 0 :(得分:2)

  

“我理解代码示例及其工作原理。我的问题是浏览器是如何做到这一点的?这是最新趋势还是我错过了什么?所有浏览器都支持这个吗?”

这最初是一个非标准的IE功能。如果我记得的话,Opera可能首先采用它,然后是Chrome浏览器。

最近,Firefox采用了它。因此,喜欢或讨厌它,大多数现代浏览器都实现了这一功能,但如果您支持旧版浏览器,您会发现一些(特别是Firefox)没有它。

许多人建议不要依赖此功能。最终由您和您的项目必须支持的浏览器决定。

答案 1 :(得分:0)

这是因为在myProblem内你正在访问一个名为myElem的全局变量,它被浏览器暴露给全局范围......它是名为/ {{1}的dom元素所以它没有与myElem相关联的jQuery包装器方法

规范可以是found here

.val()