2015-10-13 43 views
3

我想获得一些jQuery对象上下文的见解。我已经阅读了很多关于这个问题的问题,但他们都想解决一个具体的问题,因此答案解决了这个问题,并没有真正为我提供我所希望的知识。jQuery对象上下文的区别

所以我有两个按钮,和我有监听他们两个像这样一个click事件:当我尝试建立点击了哪个元素像这样

$('#copyRI, #copyIR').click(function() {...} 

现在:

$('#copyRI, #copyIR').click(function() { 
    var test = $(this); 
    var test2 = $('#copyIR'); 
    var compare = (test === test2); 
    } 

compare返回false当我点击与ID按钮= #copyIR 调试时,我注意到的testtest2背景是不同的: jquery object context difference

现在我不想找到一种方法来成功地建立哪个按钮被点击,但我想获得一些jQuery对象中“上下文”概念的见解。

在此先感谢!

回答

2

当你调用$(this)您创建一个新的jQuery对象,与HTML元素实例化它。

当您调用$('#copyIR')时,您将创建一个新的jQuery对象,并使用选择器对其进行实例化。这会在对象中存储额外的信息,包括选择器本身。

即使那不是,你会产生两个不同的对象和===(和==为此事)测试两个对象是否的情况下相同的对象没有,如果他们是相同对象。

$(this) === $(this)也会返回false。

如果您希望测试的元素是相同的,那么你可以比较底层的DOM节点(因为这些将是相同的对象)

var compare = (test[0] === test2[0]); 

或者,你可以测试,如果对象你在首先选择匹配:

var compare = test.is('#copyIR'); 
+0

好了,不知道他们都是不同的实例.. 我已经用'。就是去了()'方法,同时也想知道为什么在不同的上下文,所以谢谢你的洞察力,这真的有助于我的理解jQuery的! –

0

您应该在此处使用.is()方法。

根据选择器,元素或jQuery对象检查当前匹配的元素集合,如果这些元素中至少有一个匹配给定的参数,则返回true。

CODE:

$('#copyRI, #copyIR').click(function() { 
    var test = $(this); 
    var compare = test.is('#copyIR') 
} 
0

你可以简单地比较ID。

$('#copyRI, #copyIR').click(function() { 
    if (this.id === 'copyIR') { 
    // do something 
    } 
} 
1

jQuery的上下文(作为一个Object)按引用进行比较,所以test === test2显然会返回false因为每个变量指向一个不同的jQuery上下文(即两个上下文内部含有以相同的DOM对象没有按基准的事实没关系)。

尝试is()代替:

var compare = $(this).is('#copyIR'); 

Documetnation