ddd-jquery
Version:
de-bowerified, de-amdified, de-gruntified... jQuery.
62 lines • 2.35 kB
JavaScript
var jQuery = require('../core'), indexOf = require('../var/indexOf'), rneedsContext = require('./var/rneedsContext'), __unnameddep__ = require('../selector');
var risSimple = /^.[^:#\[\.,]*$/;
function winnow(elements, qualifier, not) {
if (jQuery.isFunction(qualifier)) {
return jQuery.grep(elements, function (elem, i) {
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 indexOf.call(qualifier, elem) >= 0 !== not;
});
}
jQuery.filter = function (expr, elems, not) {
var elem = elems[0];
if (not) {
expr = ':not(' + expr + ')';
}
return elems.length === 1 && elem.nodeType === 1 ? jQuery.find.matchesSelector(elem, expr) ? [elem] : [] : jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {
return elem.nodeType === 1;
}));
};
jQuery.fn.extend({
find: function (selector) {
var i = 0, len = this.length, ret = [], self = this;
if (typeof selector !== 'string') {
return this.pushStack(jQuery(selector).filter(function () {
for (; i < len; i++) {
if (jQuery.contains(self[i], this)) {
return true;
}
}
}));
}
i = 0;
for (; i < len; i++) {
jQuery.find(selector, self[i], ret);
}
ret = this.pushStack(len > 1 ? jQuery.unique(ret) : ret);
ret.selector = this.selector ? this.selector + ' ' + selector : selector;
return ret;
},
filter: function (selector) {
return this.pushStack(winnow(this, selector || [], false));
},
not: function (selector) {
return this.pushStack(winnow(this, selector || [], true));
},
is: function (selector) {
return !!winnow(this, typeof selector === 'string' && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;
}
});