2

请参阅基本示例:

<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("---");
    });​

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

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

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

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

4

3 回答 3

0

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

编辑示例

于 2012-06-05T12:13:55.147 回答
0

根据 API 规范

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

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

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

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

因此,按下第一个按钮会返回 has 函数中包含的 div 并按下第二个对象不会返回任何 div,因为 div 不包含按钮

于 2012-06-05T12:19:59.187 回答
0

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

于 2012-06-05T12:15:44.013 回答