首页 > 编程语言 >深入学习jquery源码之is()与not()

深入学习jquery源码之is()与not()

时间:2023-02-23 22:03:34浏览次数:35  
标签:jquery jQuery return qualifier function 元素 selector 源码 深入


深入学习jquery源码之is()与not()

is(expr|obj|ele|fn)

概述

根据选择器、DOM元素或 jQuery 对象来检测匹配元素集合,如果其中至少有一个元素符合这个给定的表达式就返回true。

如果没有元素符合,或者表达式无效,都返回'false'。 '''注意:'''在jQuery 1.3中才对所有表达式提供了支持。在先前版本中,如果提供了复杂的表达式,比如层级选择器(比如 + , ~ 和 > ),始终会返回true

参数

expr String

字符串值,包含供匹配当前元素集合的选择器表达式。

jQuery object object

现有的jQuery对象,以匹配当前的元素。

element  Expression

一个用于匹配元素的DOM元素。

function(index) Function

一个函数用来作为测试元素的集合。它接受一个参数index,这是元素在jQuery集合的索引。在函数, this指的是当前的DOM元素。

由于input元素的父元素是一个表单元素,所以返回true。

<form><input type="checkbox" /></form>
$("input[type='checkbox']").parent().is("form")
true

判断点击li标签增加背景色为红色,如果点击的是第2个strong,当前的li增加背景色为绿色

<ul>
<li><strong>list</strong> item 1 - one strong tag</li>
<li><strong>list</strong> item <strong>2</strong> - two <span>strong tags</span></li>
<li>list item 3</li>
</ul>
$("li").click(function() {
var $li = $(this),
isWithTwo = $li.is(function() {
return $('strong', this).length === 2;
});
if ( isWithTwo ) {
$li.css("background-color", "green");
} else {
$li.css("background-color", "red");
}
});

深入学习jquery源码之is()与not()_选择器

 

not(expr|ele|fn)

概述

删除与指定表达式匹配的元素

参数

expr String

一个选择器字符串。

element DOMElement

一个DOM元素

function(index) Function

一个用来检查集合中每个元素的函数。this是当前的元素。

从p元素中删除带有 select 的ID的元素

<p>Hello</p><p id="selected">Hello Again</p>
$("p").not( $("#selected")[0] )
[ <p>Hello</p> ]

 

jquery源码

jQuery.fn = jQuery.prototype = {
// The current version of jQuery being used
jquery: version,

constructor: jQuery,

// Start with an empty selector
selector: "",

// The default length of a jQuery object is 0
length: 0,

// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function (elems) {

// Build a new jQuery matched element set
var ret = jQuery.merge(this.constructor(), elems);

// Add the old object onto the stack (as a reference)
ret.prevObject = this;
ret.context = this.context;

// Return the newly-formed element set
return ret;
}

// For internal use only.
// Behaves like an Array's method, not like a jQuery method.
push: push,
sort: deletedIds.sort,
splice: deletedIds.splice
};

var rneedsContext = jQuery.expr.match.needsContext;
var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
var risSimple = /^.[^:#\[\.,]*$/;

// Implement the identical functionality for filter and not
function winnow(elements, qualifier, not) {
if (jQuery.isFunction(qualifier)) {
return jQuery.grep(elements, function (elem, i) {
/* jshint -W018 */
return !!qualifier.call(elem, i, elem) !== not;
});

}

if (qualifier.nodeType) {
return jQuery.grep(elements, function (elem) {
return (elem === qualifier) !== not;
});

}

if (typeof qualifier === "string") {
if (risSimple.test(qualifier)) {
return jQuery.filter(qualifier, elements, not);
}

qualifier = jQuery.filter(qualifier, elements);
}

return jQuery.grep(elements, function (elem) {
return (jQuery.inArray(elem, qualifier) >= 0) !== not;
});
}

jQuery.fn.extend({
not: function (selector) {
return this.pushStack(winnow(this, selector || [], true));
},
is: function (selector) {
return !!winnow(
this,

// If this is a positional/relative selector, check membership in the returned set
// so $("p:first").is("p:last") won't return true for a doc with two "p".
typeof selector === "string" && rneedsContext.test(selector) ?
jQuery(selector) :
selector || [],
false
).length;
}
});

 

 

 

 

 

 

 

 

 

标签:jquery,jQuery,return,qualifier,function,元素,selector,源码,深入
From: https://blog.51cto.com/u_11837698/6081938

相关文章