访问一个Jquery选择器作为对象属性,意想不到的结果
假设我有一个div
,如下所示:
<div id="testDiv">some stuff in here</div>
我有一个定义对象文字的脚本:
var testObject =
{
testDiv: $("#testDiv"),
testDivProperty: this.testDiv
};
为什么当我访问testObject.testDiv
我得到一个jQuery对象的引用,即,
[<div id="testDiv">…</div>]
但是当我访问testObject.testDivProperty
我得到了对实际元素的引用,即,
<div id="testDiv">…</div>
并因此无法对testObject.testDivProperty
执行jQuery操作?
试图指你定义为对象this
对象实例化时就像你期待它来不起作用。
this
在你的例子中实际上是指window
对象。 某些浏览器(例如Chrome和IE)会将命名的DOM节点附加到document
和/或window
对象,这就是为什么this.testDiv
引用id="testDiv"
的元素的id="testDiv"
。 只是碰巧你尝试访问的属性名称与元素ID具有相同的值。
为了演示真正的情况,试试这个:
<div id="test"></div>
var myObj = {
prop1: $('#test'),
prop2: this.prop1
};
this.prop1
在myObj
的上下文中应该是undefined
,但window.test
可能(取决于浏览器)引用DOM节点<div id="test"></div>
。
以你的例子为例,你可以按照如下方式完成你的任务:
var myObj = { prop1: $('#test') };
myObj.prop2 = myObj.prop1;
要么
var test = $('#test');
var myObj = {
prop1: test,
prop2: test
};
这是行不通的。 this
是这方面的window
。
var testObject =
{
testDiv: $("#testDiv"),
testDivProperty: this.testDiv // window.testDiv
}
在玩了一些之后,我找到了答案。 在创建第二个属性时, this
指的是window
,其中您有一个带有testDiv
的ID的testDiv
。
所以你实际上是这样做的...
var testObject =
{
testDiv: $("#testDiv"),
testDivProperty: window.testDiv
}
我个人并不知道你可以这样做,但window.testDiv
返回带有ID testDiv
的DOM元素。
上一篇: Accessing a Jquery selector as an object property, unexpected outcome
下一篇: How to copy directories into a directory using install in bash?