jquery $(这个)真的如何存储?

时间:2012-06-05 12:06:21

标签: jquery

请参阅this基本示例:

<div id="cont">
   <input type=button value='button'>  
</div>
<input type=button value='button'> 

脚本:

$('input').click(function(){
    console.log($(this));
    console.log($('#cont').has($(this)));
    console.log($('#cont').has($(this)).length);
    console.log("---");
    });​

在两个按钮中单击,根据console.log的$(this)值相同:

[<input type=​"button" value=​"button">​] 

他们为什么会给出不同的结果?

换句话说,当我控制log $(this)时,某些信息没有表示。此信息可能指向元素唯一ID。但它是什么,它存储在哪里?为什么它没有显示在日志中?

3 个答案:

答案 0 :(得分:0)

由于按钮具有相同的标记,因此它看起来只是一样。

Edited example

答案 1 :(得分:0)

我想我明白你在问什么。在jQuery函数中使用this与事件发生的元素有关。在您的情况下,单击事件发生的特定输入。虽然您的两个输入都具有相同的HTML,但它们是不同的元素。因此,如果您点击#cont div之外的那个,console.log($('#cont').has($(this)));不应返回任何内容。

答案 2 :(得分:0)

根据API规范

“给定一个表示一组DOM元素的jQuery对象,.has()方法从匹配元素的子集构造一个新的jQuery对象。提供的选择器针对匹配元素的后代进行测试;元素如果任何后代元素与选择器匹配,它将包含在结果中。“

http://api.jquery.com/has/

'$('#cont')。has($(this))'的返回结果不是布尔值而是匹配对象。

在你的情况下,id为'cont'的div包含第一个按钮但不包含第二个按钮。

按下第一个按钮返回has函数&amp;中的包含div。按第二个对象不返回div,因为div不包含按钮