define(["./core", "./var/indexOf", "./traversing/var/dir", "./traversing/var/siblings", "./traversing/var/rneedsContext", "./core/init", "./traversing/findFilter", "./selector"] , function (jQuery, indexOf, dir, siblings, rneedsContext){ var rparentsprev = /^(?:parents|prev(?:Until|All))/, guaranteedUnique = { children: true , contents: true , next: true , prev: true } ; jQuery.fn.extend({ has: function (target){ var targets = jQuery(target, this), l = _AN_Read_length("length", targets); 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 = _AN_Read_length("length", this), 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(_AN_Read_length("length", matched) > 1? jQuery.uniqueSort(matched): matched); } , index: function (elem){ if (!elem) { return (this[0] && this[0].parentNode)? _AN_Read_length("length", this.first().prevAll()): -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){ return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context)))); } , 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 dir(elem, "parentNode"); } , parentsUntil: function (elem, i, until){ return dir(elem, "parentNode", until); } , next: function (elem){ return sibling(elem, "nextSibling"); } , prev: function (elem){ return sibling(elem, "previousSibling"); } , nextAll: function (elem){ return dir(elem, "nextSibling"); } , prevAll: function (elem){ return dir(elem, "previousSibling"); } , nextUntil: function (elem, i, until){ return dir(elem, "nextSibling", until); } , prevUntil: function (elem, i, until){ return dir(elem, "previousSibling", until); } , siblings: function (elem){ return siblings((elem.parentNode || { } ).firstChild, elem); } , children: function (elem){ return siblings(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 (_AN_Read_length("length", this) > 1) { if (!guaranteedUnique[name]) { jQuery.uniqueSort(matched); } if (rparentsprev.test(name)) { matched.reverse(); } } return this.pushStack(matched); } ; } ); return jQuery; } );