ddd-jquery
Version:
de-bowerified, de-amdified, de-gruntified... jQuery.
135 lines • 4.8 kB
JavaScript
var jQuery = require('./core'), indexOf = require('./var/indexOf'), rneedsContext = require('./traversing/var/rneedsContext'), __unnameddep__ = require('./core/init'), __unnameddep__ = require('./traversing/findFilter'), __unnameddep__ = require('./selector');
var rparentsprev = /^(?:parents|prev(?:Until|All))/, guaranteedUnique = {
children: true,
contents: true,
next: true,
prev: true
};
jQuery.extend({
dir: function (elem, dir, until) {
var matched = [], truncate = until !== undefined;
while ((elem = elem[dir]) && elem.nodeType !== 9) {
if (elem.nodeType === 1) {
if (truncate && jQuery(elem).is(until)) {
break;
}
matched.push(elem);
}
}
return matched;
},
sibling: function (n, elem) {
var matched = [];
for (; n; n = n.nextSibling) {
if (n.nodeType === 1 && n !== elem) {
matched.push(n);
}
}
return matched;
}
});
jQuery.fn.extend({
has: function (target) {
var targets = jQuery(target, this), l = targets.length;
return this.filter(function () {
var i = 0;
for (; i < l; i++) {
if (jQuery.contains(this, targets[i])) {
return true;
}
}
});
},
closest: function (selectors, context) {
var cur, i = 0, l = this.length, matched = [], pos = rneedsContext.test(selectors) || typeof selectors !== 'string' ? jQuery(selectors, context || this.context) : 0;
for (; i < l; i++) {
for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
if (cur.nodeType < 11 && (pos ? pos.index(cur) > -1 : cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {
matched.push(cur);
break;
}
}
}
return this.pushStack(matched.length > 1 ? jQuery.unique(matched) : matched);
},
index: function (elem) {
if (!elem) {
return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;
}
if (typeof elem === 'string') {
return indexOf.call(jQuery(elem), this[0]);
}
return indexOf.call(this, elem.jquery ? elem[0] : elem);
},
add: function (selector, context) {
var set = typeof selector === 'string' ? jQuery(selector, context) : jQuery.makeArray(selector && selector.nodeType ? [selector] : selector), all = jQuery.merge(this.get(), set);
return this.pushStack(jQuery.unique(all));
},
addBack: function (selector) {
return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));
}
});
function sibling(cur, dir) {
while ((cur = cur[dir]) && cur.nodeType !== 1) {
}
return cur;
}
jQuery.each({
parent: function (elem) {
var parent = elem.parentNode;
return parent && parent.nodeType !== 11 ? parent : null;
},
parents: function (elem) {
return jQuery.dir(elem, 'parentNode');
},
parentsUntil: function (elem, i, until) {
return jQuery.dir(elem, 'parentNode', until);
},
next: function (elem) {
return sibling(elem, 'nextSibling');
},
prev: function (elem) {
return sibling(elem, 'previousSibling');
},
nextAll: function (elem) {
return jQuery.dir(elem, 'nextSibling');
},
prevAll: function (elem) {
return jQuery.dir(elem, 'previousSibling');
},
nextUntil: function (elem, i, until) {
return jQuery.dir(elem, 'nextSibling', until);
},
prevUntil: function (elem, i, until) {
return jQuery.dir(elem, 'previousSibling', until);
},
siblings: function (elem) {
return jQuery.sibling((elem.parentNode || {}).firstChild, elem);
},
children: function (elem) {
return jQuery.sibling(elem.firstChild);
},
contents: function (elem) {
return elem.contentDocument || jQuery.merge([], elem.childNodes);
}
}, function (name, fn) {
jQuery.fn[name] = function (until, selector) {
var matched = jQuery.map(this, fn, until);
if (name.slice(-5) !== 'Until') {
selector = until;
}
if (selector && typeof selector === 'string') {
matched = jQuery.filter(selector, matched);
}
if (this.length > 1) {
if (!guaranteedUnique[name]) {
jQuery.unique(matched);
}
if (rparentsprev.test(name)) {
matched.reverse();
}
}
return this.pushStack(matched);
};
});
module.exports = jQuery;