Omu Asked: 2025-02-13 06:17:49 +0800 CST2025-02-13 06:17:49 +0800 CST 2025-02-13 06:17:49 +0800 CST 为什么 $(window).is(window) 返回 false 772 有谁知道为什么: $(window).is(window) 返回false 我(和所有 AI)认为应该是真的,至少如果你使用非窗口元素它会返回 true。 jquery 1 个回答 Voted Best Answer Barmar 2025-02-13T06:42:14+08:002025-02-13T06:42:14+08:00 这可能是 jQuery 的一个 bug。.is(),.filter()并且.not()都调用一个内部函数winnow(): function winnow( elements, qualifier, not ) { if ( isFunction( qualifier ) ) { return jQuery.grep( elements, function( elem, i ) { return !!qualifier.call( elem, i, elem ) !== not; } ); } // Single element if ( qualifier.nodeType ) { return jQuery.grep( elements, function( elem ) { return ( elem === qualifier ) !== not; } ); } // Arraylike of elements (jQuery, arguments, Array) if ( typeof qualifier !== "string" ) { return jQuery.grep( elements, function( elem ) { return ( indexOf.call( qualifier, elem ) > -1 ) !== not; } ); } // Filtered directly for both simple and complex selectors return jQuery.filter( qualifier, elements, not ); } 要判断参数是否为单个元素,它会检查是否qualifier.nodeType为真。但是window.nodeType是undefined,所以它会转到代码,该代码期望参数是字符串选择器或类似数组的元素集合(jQuery 对象是类似数组的)。 因此,如果将参数包装在数组中,它可以按预期工作: console.log($(window).is([window])) <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
这可能是 jQuery 的一个 bug。
.is()
,.filter()
并且.not()
都调用一个内部函数winnow()
:要判断参数是否为单个元素,它会检查是否
qualifier.nodeType
为真。但是window.nodeType
是undefined
,所以它会转到代码,该代码期望参数是字符串选择器或类似数组的元素集合(jQuery 对象是类似数组的)。因此,如果将参数包装在数组中,它可以按预期工作: