访问一个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.prop1myObj的上下文中应该是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元素。

链接地址: http://www.djcxy.com/p/16315.html

上一篇: Accessing a Jquery selector as an object property, unexpected outcome

下一篇: How to copy directories into a directory using install in bash?