-
jquery core 源码分析
- **
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- var _jQuery = window.jQuery,
-
- _$ = window.$;
-
- var jQuery = window.jQuery = window.$ = function(selector, context) {
-
- return new jQuery.fn.init(selector, context);
- };
-
-
-
- var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
-
-
- isSimple = /^.[^:#\[\.]*$/,
-
-
- undefined;
-
- jQuery.fn = jQuery.prototype = {
- init : function(selector, context) {
- selector = selector || document;
-
-
- if (selector.nodeType) {
- this[0] = selector;
- this.length = 1;
- return this;
- }
- if (typeof selector == "string") {
-
- var match = quickExpr.exec(selector);
-
- if (match && (match[1] || !context)) {
- if (match[1])
- selector = jQuery.clean([match[1]], context);
- else {
- var elem = document.getElementById(match[3]);
-
-
- if (elem) {
-
-
- if (elem.id != match[3])
- return jQuery().find(selector);
-
-
-
- return jQuery(elem);
- }
- selector = [];
- }
- } else
-
- return jQuery(context).find(selector);
- } else if (jQuery.isFunction(selector))
-
- return jQuery(document)[jQuery.fn.ready ? "ready" : "load"](selector);
-
-
- return this.setArray(jQuery.makeArray(selector));
- },
-
-
- jquery : "@VERSION",
-
-
- size : function() {
- return this.length;
- },
-
- length : 0,
-
-
- get : function(num) {
- return num == undefined ? jQuery.makeArray(this) : this[num];
- },
-
-
- pushStack : function(elems) {
- var ret = jQuery(elems);
- ret.prevObject = this;
- return ret;
- },
-
-
- setArray : function(elems) {
- this.length = 0;
- Array.prototype.push.apply(this, elems);
- return this;
- },
-
-
- each : function(callback, args) {
-
- return jQuery.each(this, callback, args);
- },
-
-
- index : function(elem) {
- var ret = -1;
- return jQuery.inArray(
- elem && elem.jquery ? elem[0] : elem, this);
- },
-
-
-
-
-
-
-
-
-
- attr : function(name, value, type) {
- var options = name;
- if (name.constructor == String)
- if (value === undefined)
-
- return this[0] && jQuery[type || "attr"](this[0], name);
- else {
- options = {};
- options[name] = value;
- }
- return this.each(function(i) {
- for (name in options)
-
- jQuery.attr(type ? this.style : this, name, jQuery
- .prop(this, options[name], type, i, name));
- });
- },
-
-
-
-
-
-
-
- css : function(key, value) {
-
- if ((key == 'width' || key == 'height') && parseFloat(value) < 0)
- value = undefined;
- return this.attr(key, value, "curCSS");
- },
-
-
-
-
-
- text : function(text) {
- if (typeof text != "object" && text != null)
- return this.empty()
- .append((this[0] && this[0].ownerDocument || document)
- .createTextNode(text));
-
- var ret = "";
- jQuery.each(text || this, function() {
- jQuery.each(this.childNodes, function() {
- if (this.nodeType != 8)
- ret += (this.nodeType != 1
- ? this.nodeValue
- : jQuery.fn.text([this]));
- });
- });
-
- return ret;
- },
-
-
-
-
-
-
-
- wrapAll : function(html) {
- if (this[0])
-
-
-
-
-
-
-
-
- jQuery(html, this[0].ownerDocument).clone().insertBefore(this[0])
- .map(function() {
- var elem = this;
- while (elem.firstChild)
- elem = elem.firstChild;
- return elem;
- }).append(this);
-
- return this;
- },
-
-
- wrapInner : function(html) {
- return this.each(function() {
- jQuery(this).contents().wrapAll(html);
- });
- },
-
-
- wrap : function(html) {
- return this.each(function() {
- jQuery(this).wrapAll(html);
- });
- },
-
-
-
-
-
-
-
-
-
- append : function() {
- return this.domManip(arguments, true, false, function(elem) {
- if (this.nodeType == 1)
- this.appendChild(elem);
- });
- },
-
-
- prepend : function() {
- return this.domManip(arguments, true, true, function(elem) {
- if (this.nodeType == 1)
- this.insertBefore(elem, this.firstChild);
- });
- },
-
-
- before : function() {
- return this.domManip(arguments, false, false, function(elem) {
- this.parentNode.insertBefore(elem, this);
- });
- },
-
-
- after : function() {
- return this.domManip(arguments, false, true, function(elem) {
- this.parentNode.insertBefore(elem, this.nextSibling);
- });
- },
-
-
-
-
- end : function() {
- return this.prevObject || jQuery([]);
- },
-
-
-
- find : function(selector) {
- var elems = jQuery.map(this, function(elem) {
- return jQuery.find(selector, elem);
- });
-
- return this.pushStack(/[^+>] [^+>]/.test(selector) ? jQuery
- .unique(elems) : elems);
- },
-
-
- clone : function(events) {
-
- var ret = this.map(function() {
- if (jQuery.browser.msie && !jQuery.isXMLDoc(this)) {
-
-
- var clone = this.cloneNode(true), container = document
- .createElement("div");
- container.appendChild(clone);
- return jQuery.clean([container.innerHTML])[0];
- } else
- return this.cloneNode(true);
- });
-
-
-
-
-
- var clone = ret.find("*").andSelf().each(function() {
- if (this[expando] != undefined)
- this[expando] = null;
- });
-
- if (events === true)
- this.find("*").andSelf().each(function(i) {
- if (this.nodeType == 3)
- return;
- var events = jQuery.data(this, "events");
-
- for (var type in events)
- for (var handler in events[type])
- jQuery.event.add(clone[i], type, events[type][handler],
- events[type][handler].data);
- });
-
- return ret;
- },
-
-
-
- filter : function(selector) {
- return this.pushStack(jQuery.isFunction(selector)
- && jQuery.grep(this, function(elem, i) {
- return selector.call(elem, i);
- }) || jQuery.multiFilter(selector, this));
- },
-
-
- not : function(selector) {
- if (selector.constructor == String)
- if (isSimple.test(selector))
- return this.pushStack(jQuery.multiFilter(selector, this, true));
- else
-
- selector = jQuery.multiFilter(selector, this);
-
- var isArrayLike = selector.length
- && selector[selector.length - 1] !== undefined
- && !selector.nodeType;
- return this.filter(function() {
- return isArrayLike ? jQuery.inArray(this, selector) < 0
- : this != selector;
- });
- },
-
-
- add : function(selector) {
- return this.pushStack(jQuery.unique(jQuery.merge(this.get(),
- typeof selector == 'string' ? jQuery(selector) : jQuery
- .makeArray(selector))));
- },
-
-
- is : function(selector) {
- return !!selector && jQuery.multiFilter(selector, this).length > 0;
- },
-
-
- hasClass : function(selector) {
- return this.is("." + selector);
- },
-
-
-
-
- val : function(value) {
- if (value == undefined) {
-
- if (this.length) {
- var elem = this[0];
-
- if (jQuery.nodeName(elem, 'option'))
- return (elem.attributes.value || {}).specified
- ? elem.value
- : elem.text;
-
-
- if (jQuery.nodeName(elem, "select")) {
- var index = elem.selectedIndex, values = [], options = elem.options, one = elem.type == "select-one";
-
-
- if (index < 0)
- return null;
-
-
- for (var i = one ? index : 0, max = one
- ? index + 1
- : options.length;i < max; i++) {
- var option = options[i];
-
- if (option.selected) {
-
- value = jQuery(option).val();
-
-
- if (one)
- return value;
-
-
- values.push(value);
- }
- }
-
- return values;
-
-
- } else
- return (this[0].value || "").replace(/\r/g, "");
-
- }
-
- return undefined;
- }
-
- if (value.constructor == Number)
- value += '';
-
- return this
- .each(function() {
- if (this.nodeType != 1)
- return;
-
- if (value.constructor == Array
- && /radio|checkbox/.test(this.type))
- this.checked = (jQuery.inArray(this.value, value) >= 0 || jQuery
- .inArray(this.name, value) >= 0);
-
- else if (jQuery.nodeName(this, "select")) {
- var values = jQuery.makeArray(value);
-
- jQuery("option", this)
- .each(function() {
- this.selected = (jQuery.inArray(this.value,
- values) >= 0 || jQuery.inArray(
- this.text, values) >= 0);
- });
-
- if (!values.length)
- this.selectedIndex = -1;
-
- } else
- this.value = value;
- });
- },
-
-
-
- html : function(value) {
- return value == undefined ? (this[0] ? this[0].innerHTML : null) : this
- .empty().append(value);
- },
-
-
- replaceWith : function(value) {
- return this.after(value).remove();
- },
-
- eq : function(i) {
- return this.slice(i, +i + 1);
- },
-
-
- slice : function() {
- return this.pushStack(Array.prototype.slice.apply(this, arguments));
- },
-
-
-
- map : function(callback) {
- return this.pushStack(jQuery.map(this, function(elem, i) {
- return callback.call(elem, i, elem);
- }));
- },
-
-
- andSelf : function() {
- return this.add(this.prevObject);
- },
-
-
-
-
-
-
-
-
-
- data : function(key, value) {
- var parts = key.split(".");
- parts[1] = parts[1] ? "." + parts[1] : "";
-
- if (value === undefined) {
-
- var data = this.triggerHandler("getData" + parts[1] + "!",
- [parts[0]]);
-
- if (data === undefined && this.length)
- data = jQuery.data(this[0], key);
-
- return data === undefined && parts[1] ? this.data(parts[0]) : data;
- } else {
- return this.trigger("setData" + parts[1] + "!", [parts[0], value])
- .each(function() {
- jQuery.data(this, key, value);
- });
- }
- },
-
-
-
- removeData : function(key) {
- return this.each(function() {
- jQuery.removeData(this, key);
- });
- },
-
-
-
- domManip : function(args, table, reverse, callback) {
- var clone = this.length > 1, elems;
-
-
- return this.each(function() {
- if (!elems) {
- elems = jQuery.clean(args, this.ownerDocument);
- if (reverse)
- elems.reverse();
- }
-
- var obj = this;
-
-
- if (table && jQuery.nodeName(this, "table")
- && jQuery.nodeName(elems[0], "tr"))
- obj = this.getElementsByTagName("tbody")[0]
- || this.appendChild(this.ownerDocument
- .createElement("tbody"));
-
- var scripts = jQuery([]);
-
- jQuery.each(elems, function() {
-
- var elem = clone ? jQuery(this).clone(true)[0] : this;
-
-
- if (jQuery.nodeName(elem, "script"))
- scripts = scripts.add(elem);
- else {
-
- if (elem.nodeType == 1)
- scripts = scripts.add(jQuery("script", elem)
- .remove());
-
-
- callback.call(obj, elem);
- }
- });
-
- scripts.each(evalScript);
- });
- }
- };
-
-
- jQuery.fn.init.prototype = jQuery.fn;
-
- function evalScript(i, elem) {
- if (elem.src) {
- jQuery.ajax( {
- url : elem.src,
- async : false,
- dataType : "script"
- });
- } else {
- jQuery
- .globalEval(elem.text || elem.textContent || elem.innerHTML
- || "");
- }
- if (elem.parentNode)
- elem.parentNode.removeChild(elem);
- }
-
- function now() {
- return +new Date;
- }
-
- jQuery.extend = jQuery.fn.extend = function() {
-
- var target = arguments[0] || {},
- i = 1, length = arguments.length, deep = false, options;
-
- if (target.constructor == Boolean) {
- deep = target;
- target = arguments[1] || {};
- i = 2;
- }
-
-
- if (typeof target != "object" && typeof target != "function")
- target = {};
-
- if (length == i) {
- target = this;
- --i;
- }
-
- for (;i < length; i++)
- if ((options = arguments[i]) != null)
-
- for (var name in options) {
- var src = target[name], copy = options[name];
- if (target === copy)
- continue;
-
- if (deep && copy && typeof copy == "object" && !copy.nodeType)
- target[name] = jQuery.extend(deep, src
- || (copy.length != null ? [] : {}), copy);
- else if (copy !== undefined)
- target[name] = copy;
-
- }
-
- return target;
- };
-
- var expando = "jQuery" + now(), uuid = 0, windowData = {},
-
- exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
-
-
- defaultView = document.defaultView || {};
-
- jQuery.extend( {
- noConflict : function(deep) {
- window.$ = _$;
-
- if (deep)
- window.jQuery = _jQuery;
-
- return jQuery;
- },
-
-
-
-
- isFunction : function(fn) {
- return fn instanceof Function;
- },
-
-
- isXMLDoc : function(elem) {
- return elem.documentElement && !elem.body || elem.tagName
- && elem.ownerDocument && !elem.ownerDocument.body;
- },
-
-
-
- globalEval : function(data) {
- data = jQuery.trim(data);
-
- if (data) {
-
-
- var head = document.getElementsByTagName("head")[0]
- || document.documentElement, script = document
- .createElement("script");
-
- script.type = "text/javascript";
- if (jQuery.browser.msie)
- script.text = data;
- else
- script.appendChild(document.createTextNode(data));
-
-
-
- head.insertBefore(script, head.firstChild);
- head.removeChild(script);
- }
- },
-
-
- nodeName : function(elem, name) {
- return elem.nodeName
- && elem.nodeName.toUpperCase() == name.toUpperCase();
- },
-
- cache : {},
-
- data : function(elem, name, data) {
- elem = elem == window ? windowData : elem;
-
- var id = elem[expando];
-
-
- if (!id)
- id = elem[expando] = ++uuid;
-
-
-
- if (name && !jQuery.cache[id])
- jQuery.cache[id] = {};
-
-
- if (data !== undefined)
- jQuery.cache[id][name] = data;
-
-
- return name ? jQuery.cache[id][name] : id;
- },
-
- removeData : function(elem, name) {
- elem = elem == window ? windowData : elem;
-
- var id = elem[expando];
-
-
- if (name) {
- if (jQuery.cache[id]) {
-
- delete jQuery.cache[id][name];
-
-
- name = "";
-
- for (name in jQuery.cache[id])
- break;
-
- if (!name)
- jQuery.removeData(elem);
- }
-
-
- } else {
-
- try {
- delete elem[expando];
- } catch (e) {
-
-
- if (elem.removeAttribute)
- elem.removeAttribute(expando);
- }
-
-
- delete jQuery.cache[id];
- }
- },
-
-
- each : function(object, callback, args) {
- var name, i = 0, length = object.length;
-
- if (args) {
- if (length == undefined) {
- for (name in object)
- if (callback.apply(object[name], args) === false)
- break;
- } else
- for (;i < length;)
- if (callback.apply(object[i++], args) === false)
- break;
-
-
- } else {
-
- if (length == undefined) {
- for (name in object)
- if (callback.call(object[name], name, object[name]) === false)
- break;
- } else
-
- for (var value = object[0];i < length
- && callback.call(value, i, value) !== false; value = object[++i]) {
- }
- }
-
- return object;
- },
-
-
- prop : function(elem, value, type, i, name) {
- if (jQuery.isFunction(value))
- value = value.call(elem, i);
-
- return value && value.constructor == Number && type == "curCSS"
- && !exclude.test(name) ? value + "px" : value;
- },
-
-
- className : {
-
- add : function(elem, classNames) {
- jQuery.each((classNames || "").split(/\s+/),
- function(i, className) {
- if (elem.nodeType == 1
- && !jQuery.className.has(elem.className,
- className))
- elem.className += (elem.className ? " " : "")
- + className;
- });
- },
-
-
- remove : function(elem, classNames) {
- if (elem.nodeType == 1)
- elem.className = classNames != undefined ? jQuery.grep(
- elem.className.split(/\s+/), function(className) {
- return !jQuery.className.has(classNames,
- className);
- }).join(" ") : "";
- },
-
-
- has : function(elem, className) {
- return jQuery.inArray(className, (elem.className || elem)
- .toString().split(/\s+/)) > -1;
- }
- },
-
-
- swap : function(elem, options, callback) {
- var old = {};
- for (var name in options) {
- old[name] = elem.style[name];
- elem.style[name] = options[name];
- }
-
- callback.call(elem);
-
-
- for (var name in options)
- elem.style[name] = old[name];
- },
-
-
- css : function(elem, name, force) {
-
- if (name == "width" || name == "height") {
- var val, props = {
- position : "absolute",
- visibility : "hidden",
- display : "block"
- }, which = (name == "width" ? ["Left", "Right"] : ["Top",
- "Bottom"]);
-
- function getWH() {
- val = name == "width"
- ? elem.offsetWidth
- : elem.offsetHeight;
- var padding = 0, border = 0;
- jQuery.each(which, function() {
-
- padding += parseFloat(jQuery.curCSS(elem, "padding"
- + this, true))
- || 0;
-
- border += parseFloat(jQuery.curCSS(elem, "border"
- + this + "Width", true))
- || 0;
- });
- val -= Math.round(padding + border);
- }
-
- if (jQuery(elem).is(":visible"))
- getWH();
- else
-
- jQuery.swap(elem, props, getWH);
-
- return Math.max(0, val);
- }
-
- return jQuery.curCSS(elem, name, force);
- },
-
- curCSS : function(elem, name, force) {
- var ret, style = elem.style;
-
-
- function color(elem) {
- if (!jQuery.browser.safari)
- return false;
-
-
- var ret = defaultView.getComputedStyle(elem, null);
- return !ret || ret.getPropertyValue("color") == "";
- }
-
-
- if (name == "opacity" && jQuery.browser.msie) {
- ret = jQuery.attr(style, "opacity");
- return ret == "" ? "1" : ret;
- }
-
-
- if (jQuery.browser.opera && name == "display") {
- var save = style.outline;
- style.outline = "0 solid black";
- style.outline = save;
- }
-
- if (name.match(/float/i))
- name = styleFloat;
-
- if (!force && style && style[name])
- ret = style[name];
- else if (defaultView.getComputedStyle) {
-
- if (name.match(/float/i))
- name = "float";
-
- name = name.replace(/([A-Z])/g, "-$1").toLowerCase();
-
- var computedStyle = defaultView.getComputedStyle(elem, null);
-
- if (computedStyle && !color(elem))
- ret = computedStyle.getPropertyValue(name);
- else {
- var swap = [], stack = [], a = elem, i = 0;
-
-
- for (;a && color(a); a = a.parentNode)
- stack.unshift(a);
-
-
-
-
- for (;i < stack.length; i++)
- if (color(stack[i])) {
- swap[i] = stack[i].style.display;
- stack[i].style.display = "block";
- }
-
-
-
- ret = name == "display" && swap[stack.length - 1] != null
- ? "none"
- : (computedStyle && computedStyle
- .getPropertyValue(name))
- || "";
-
-
- for (i = 0;i < swap.length; i++)
- if (swap[i] != null)
- stack[i].style.display = swap[i];
- }
-
-
- if (name == "opacity" && ret == "")
- ret = "1";
-
- } else if (elem.currentStyle) {
- var camelCase = name.replace(/\-(\w)/g, function(all, letter) {
- return letter.toUpperCase();
- });
-
- ret = elem.currentStyle[name] || elem.currentStyle[camelCase];
-
-
-
-
-
-
-
- if (!/^\d+(px)?$/i.test(ret) && /^\d/.test(ret)) {
-
- var left = style.left, rsLeft = elem.runtimeStyle.left;
-
-
- elem.runtimeStyle.left = elem.currentStyle.left;
- style.left = ret || 0;
- ret = style.pixelLeft + "px";
-
-
- style.left = left;
- elem.runtimeStyle.left = rsLeft;
- }
- }
-
- return ret;
- },
-
-
- clean : function(elems, context) {
- var ret = [];
- context = context || document;
-
-
- if (typeof context.createElement == 'undefined')
-
- context = context.ownerDocument || context[0]
- && context[0].ownerDocument || document;
-
- jQuery
- .each(elems, function(i, elem) {
- if (typeof elem == 'number')
- elem += '';
-
- if (!elem)
- return;
-
-
- if (typeof elem == "string") {
-
-
- elem = elem
- .replace(
- /(<(\w+)[^>]*?)\/>/g,
- function(all, front, tag) {
- return tag
- .match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)
- ? all
- : front + "></" + tag
- + ">";
- });
-
-
- var tags = jQuery.trim(elem).toLowerCase(), div = context
- .createElement("div");
-
-
- var wrap = !tags.indexOf("<opt")
- && [1, "<select multiple='multiple'>",
- "</select>"]
- || !tags.indexOf("<leg")
- && [1, "<fieldset>", "</fieldset>"]
- || tags
- .match(/^<(thead|tbody|tfoot|colg|cap)/)
- && [1, "<table>", "</table>"]
- || !tags.indexOf("<tr")
- && [2, "<table><tbody>", "</tbody></table>"]
- || (!tags.indexOf("<td") || !tags
- .indexOf("<th"))
- && [3, "<table><tbody><tr>",
- "</tr></tbody></table>"]
- || !tags.indexOf("<col")
- && [2, "<table><tbody></tbody><colgroup>",
- "</colgroup></table>"]
- ||
-
-
-
- jQuery.browser.msie
- && [1, "div<div>", "</div>"] ||
-
- [0, "", ""];
-
-
- div.innerHTML = wrap[1] + elem + wrap[2];
-
- while (wrap[0]--)
-
-
- div = div.lastChild;
-
-
- if (jQuery.browser.msie) {
-
-
- var tbody = !tags.indexOf("<table")
- && tags.indexOf("<tbody") < 0
- ? div.firstChild
- && div.firstChild.childNodes :
-
-
- wrap[1] == "<table>"
- && tags.indexOf("<tbody") < 0
- ? div.childNodes
- : [];
-
- for (var j = tbody.length - 1;j >= 0; --j)
- if (jQuery.nodeName(tbody[j], "tbody")
- && !tbody[j].childNodes.length)
- tbody[j].parentNode
- .removeChild(tbody[j]);
-
-
-
- if (/^\s/.test(elem))
- div.insertBefore(
- context.createTextNode(elem
- .match(/^\s*/)[0]),
- div.firstChild);
-
- }
-
- elem = jQuery.makeArray(div.childNodes);
- }
-
- if (elem.length === 0
- && (!jQuery.nodeName(elem, "form") && !jQuery
- .nodeName(elem, "select")))
- return;
-
- if (elem[0] == undefined
- || jQuery.nodeName(elem, "form")
- || elem.options)
- ret.push(elem);
-
- else
-
- ret = jQuery.merge(ret, elem);
-
- });
-
- return ret;
- },
-
-
-
- attr : function(elem, name, value) {
-
- if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
- return undefined;
-
- var notxml = !jQuery.isXMLDoc(elem),
-
- set = value !== undefined, msie = jQuery.browser.msie;
-
-
- name = notxml && jQuery.props[name] || name;
-
-
-
- if (elem.tagName) {
- var special = /href|src|style/.test(name);
-
-
- if (name == "selected" && jQuery.browser.safari)
- elem.parentNode.selectedIndex;
-
- if (name in elem && notxml && !special) {
- if (set) {
-
- if (name == "type" && jQuery.nodeName(elem, "input")
- && elem.parentNode)
- throw "type property can't be changed";
-
- elem[name] = value;
- }
-
-
- if (jQuery.nodeName(elem, "form")
- && elem.getAttributeNode(name))
- return elem.getAttributeNode(name).nodeValue;
-
- return elem[name];
- }
-
- if (msie && notxml && name == "style")
- return jQuery.attr(elem.style, "cssText", value);
-
- if (set)
-
- elem.setAttribute(name, "" + value);
-
- var attr = msie && notxml && special
-
- ? elem.getAttribute(name, 2)
- : elem.getAttribute(name);
-
- return attr === null ? undefined : attr;
- }
-
-
-
-
- if (msie && name == "opacity") {
- if (set) {
-
- elem.zoom = 1;
-
-
- elem.filter = (elem.filter || "").replace(/alpha\([^)]*\)/,
- "")
- + ((parseInt(value) + '' == "NaN"
- ? ""
- : "alpha(opacity=" + value * 100 + ")"));
- }
-
- return elem.filter && elem.filter.indexOf("opacity=") >= 0
- ? (parseFloat(elem.filter.match(/opacity=([^)]*)/)[1]) / 100)
- + ''
- : "";
- }
-
- name = name.replace(/-([a-z])/ig, function(all, letter) {
- return letter.toUpperCase();
- });
-
- if (set)
- elem[name] = value;
-
- return elem[name];
- },
-
-
- trim : function(text) {
- return (text || "").replace(/^\s+|\s+$/g, "");
- },
-
-
- makeArray : function(array) {
- var ret = [];
-
- if (array != null) {
- var i = array.length;
-
- if (i == null || array.split || array.setInterval || array.call)
- ret[0] = array;
- else
- while (i)
- ret[--i] = array[i];
- }
-
- return ret;
- },
-
-
- inArray : function(elem, array) {
- for (var i = 0, length = array.length;i < length; i++)
-
- if (array[i] === elem)
- return i;
- return -1;
- },
-
-
- merge : function(first, second) {
-
-
- var i = 0, elem, pos = first.length;
-
-
-
- if (jQuery.browser.msie) {
- while (elem = second[i++])
- if (elem.nodeType != 8)
- first[pos++] = elem;
-
- } else
- while (elem = second[i++])
- first[pos++] = elem;
-
- return first;
- },
-
-
- unique : function(array) {
- var ret = [], done = {};
-
- try {
-
- for (var i = 0, length = array.length;i < length; i++) {
- var id = jQuery.data(array[i]);
-
- if (!done[id]) {
- done[id] = true;
- ret.push(array[i]);
- }
- }
-
- } catch (e) {
- ret = array;
- }
-
- return ret;
- },
-
-
- grep : function(elems, callback, inv) {
- var ret = [];
-
-
-
- for (var i = 0, length = elems.length;i < length; i++)
- if (!inv != !callback(elems[i], i))
- ret.push(elems[i]);
-
- return ret;
- },
-
-
- map : function(elems, callback) {
- var ret = [];
-
-
-
- for (var i = 0, length = elems.length;i < length; i++) {
- var value = callback(elems[i], i);
-
- if (value != null)
- ret[ret.length] = value;
- }
-
- return ret.concat.apply([], ret);
- }
- });
-
- var userAgent = navigator.userAgent.toLowerCase();
-
-
- jQuery.browser = {
- version : (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [0, '0'])[1],
- safari : /webkit/.test(userAgent),
- opera : /opera/.test(userAgent),
- msie : /msie/.test(userAgent) && !/opera/.test(userAgent),
- mozilla : /mozilla/.test(userAgent)
- && !/(compatible|webkit)/.test(userAgent)
- };
-
- var styleFloat = jQuery.browser.msie ? "styleFloat" : "cssFloat";
-
- jQuery.extend( {
-
-
- boxModel : !jQuery.browser.msie || document.compatMode == "CSS1Compat",
-
- props : {
- "for" : "htmlFor",
- "class" : "className",
- "float" : styleFloat,
- cssFloat : styleFloat,
- styleFloat : styleFloat,
- readonly : "readOnly",
- maxlength : "maxLength",
- cellspacing : "cellSpacing",
- rowspan : "rowSpan"
- }
- });
-
-
- jQuery.each( {
- parent : function(elem) {
- return elem.parentNode;
- },
- parents : function(elem) {
- return jQuery.dir(elem, "parentNode");
- },
- next : function(elem) {
- return jQuery.nth(elem, 2, "nextSibling");
- },
- prev : function(elem) {
- return jQuery.nth(elem, 2, "previousSibling");
- },
- nextAll : function(elem) {
- return jQuery.dir(elem, "nextSibling");
- },
- prevAll : function(elem) {
- return jQuery.dir(elem, "previousSibling");
- },
- siblings : function(elem) {
- return jQuery.sibling(elem.parentNode.firstChild, elem);
- },
- children : function(elem) {
- return jQuery.sibling(elem.firstChild);
- },
- contents : function(elem) {
- return jQuery.nodeName(elem, "iframe") ? elem.contentDocument
- || elem.contentWindow.document : jQuery
- .makeArray(elem.childNodes);
- }
- }, function(name, fn) {
- jQuery.fn[name] = function(selector) {
- var ret = jQuery.map(this, fn);
- if (selector && typeof selector == "string")
- ret = jQuery.multiFilter(selector, ret);
- return this.pushStack(jQuery.unique(ret));
- };
- });
-
-
-
-
-
- jQuery.each( {
- appendTo : "append",
- prependTo : "prepend",
- insertBefore : "before",
- insertAfter : "after",
- replaceAll : "replaceWith"
- }, function(name, original) {
- jQuery.fn[name] = function() {
- var args = arguments;
-
- return this.each(function() {
- for (var i = 0, length = args.length;i < length; i++)
- jQuery(args[i])[original](this);
- });
- };
- });
-
-
- jQuery.each( {
- removeAttr : function(name) {
- jQuery.attr(this, name, "");
- if (this.nodeType == 1)
- this.removeAttribute(name);
- },
-
- addClass : function(classNames) {
- jQuery.className.add(this, classNames);
- },
-
- removeClass : function(classNames) {
- jQuery.className.remove(this, classNames);
- },
-
- toggleClass : function(classNames) {
- jQuery.className[jQuery.className.has(this, classNames)
- ? "remove"
- : "add"](this, classNames);
- },
-
- remove : function(selector) {
- if (!selector || jQuery.filter(selector, [this]).r.length) {
-
- jQuery("*", this).add([this]).each(function() {
- jQuery.event.remove(this);
- jQuery.removeData(this);
- });
- if (this.parentNode)
- this.parentNode.removeChild(this);
- }
- },
- empty : function() {
-
- jQuery(">*", this).remove();
- while (this.firstChild)
-
- this.removeChild(this.firstChild);
- }
- }, function(name, fn) {
- jQuery.fn[name] = function() {
- return this.each(fn, arguments);
- };
- });
-
-
- jQuery
- .each(
- ["Height", "Width"],
- function(i, name) {
- var type = name.toLowerCase();
-
- jQuery.fn[type] = function(size) {
-
- return this[0] == window ? (
- jQuery.browser.opera
- && document.body["client" + name]
- || jQuery.browser.safari
- && window["inner" + name]
- || document.compatMode == "CSS1Compat"
- && document.documentElement["client"
- + name] || document.body["client"
- + name])
- : this[0] == document ? (
- Math
- .max(
- Math
- .max(
- document.body["scroll"
- + name],
- document.documentElement["scroll"
- + name]),
- Math
- .max(
- document.body["offset"
- + name],
- document.documentElement["offset"
- + name])))
- : (size == undefined ? (
- this.length ? jQuery.css(
- this[0], type) : null)
- : (
- this
- .css(
- type,
- size.constructor == String
- ? size
- : size
- + "px")));
- };
- });
-
-
- function num(elem, prop) {
- return elem[0] && parseInt(jQuery.curCSS(elem[0], prop, true), 10) || 0;
- }
-
相关阅读:
WordCloud 简介
Volo.Abp.EntityFrameworkCore.MySQL 使用
关于Git的那些事
国内外各大免费搜索引擎、导航网址提交入口
C#读取Excel的数据,并且以混合模式读取,防止数据类型变更
如何提升程序员的非技术才能
用户体验设计流程与文档编制指南
【海量干货】89页PPT详解微信O2O行业解决方案
AutoCompleteTextView 和 MultiAutoCompleteTextView 自动完成文本控件
zookeeper简介
-
原文地址:https://www.cnblogs.com/luluping/p/1347400.html
Copyright © 2020-2023
润新知