UNPKG

hdjs

Version:
250 lines (206 loc) 6.68 kB
/** * @fileOverview jq-bridge 主要实现像jQuery一样的功能方法,可以替换成jQuery, * 这里只实现了此组件所需的部分。 * * **此文件的代码还不可用,还是直接用jquery吧** * @beta */ define(function() { var doc = window.document, emptyArray = [], slice = emptyArray.slice, class2type = {}, hasOwn = class2type.hasOwnProperty, toString = class2type.toString, rId = /^#(.*)$/; function each( obj, iterator ) { var i; //fix error, add guard here if(!obj) { return; } // like array if ( typeof obj !== 'function' && typeof obj.length === 'number' ) { for ( i = 0; i < obj.length; i++ ) { if ( iterator.call( obj[ i ], i, obj[ i ] ) === false ) { return obj; } } } else { for ( i in obj ) { if ( hasOwn.call( obj, i ) && iterator.call( obj[ i ], i, obj[ i ] ) === false ) { return obj; } } } return obj; } function extend( target, source, deep ) { each( source, function( key, val ) { if ( deep && typeof val === 'object' ) { if ( typeof target[ key ] !== 'object' ) { target[ key ] = type( val ) === 'array' ? [] : {}; } extend( target[ key ], val, deep ); } else { target[ key ] = val; } }); } each( ('Boolean Number String Function Array Date RegExp Object' + ' Error').split(' '), function( i, name ) { class2type[ '[object ' + name + ']' ] = name.toLowerCase(); }); function setAttribute( node, name, value ) { value == null ? node.removeAttribute( name ) : node.setAttribute( name, value ); } /** * 只支持ID选择。 */ function $( elem ) { var api = {}; elem = typeof elem === 'string' && rId.test( elem ) ? doc.getElementById( RegExp.$1 ) : elem; if ( elem ) { api[ 0 ] = elem; api.length = 1; } return $.extend( api, { _wrap: true, get: function() { return elem; }, /** * 添加className */ addClass: function( classname ) { elem.classList.add( classname ); return this; }, removeClass: function( classname ) { elem.classList.remove( classname ); return this; }, //fix error, $(...).each is used in the source each: function(callback){ [].every.call(this, function(el, idx){ return callback.call(el, idx, el) !== false }) return this }, html: function( html ) { if ( html ) { elem.innerHTML = html; } return elem.innerHTML; }, attr: function( key, val ) { if ( $.isObject( key ) ) { $.each( key, function( k, v ) { setAttribute( elem, k, v ); }); } else { setAttribute( elem, key, val ); } }, empty: function() { elem.innerHTML = ''; return this; }, before: function( el ) { elem.parentNode.insertBefore( el, elem ); }, append: function( el ) { el = el._wrap ? el.get() : el; elem.appendChild( el ); }, text: function() { return elem.textContent; }, // on on: function( type, fn ) { if ( elem.addEventListener ) { elem.addEventListener( type, fn, false ); } else if ( elem.attachEvent ) { elem.attachEvent( 'on' + type, fn ); } return this; }, // off off: function( type, fn ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, fn, false ); } else if ( elem.attachEvent ) { elem.detachEvent( 'on' + type, fn ); } return this; } }); } $.each = each; $.extend = function( /*[deep, ]*/target/*, source...*/ ) { var args = slice.call( arguments, 1 ), deep; if ( typeof target === 'boolean' ) { deep = target; target = args.shift(); } args.forEach(function( arg ) { arg && extend( target, arg, deep ); }); return target; }; function type( obj ) { /*jshint eqnull:true*/ return obj == null ? String( obj ) : class2type[ toString.call( obj ) ] || 'object'; } $.type = type; //fix error, $.grep is used in the source $.grep = function( elems, callback, invert ) { var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert; // Go through the array, only saving the items // that pass the validator function for ( ; i < length; i++ ) { callbackInverse = !callback( elems[ i ], i ); if ( callbackInverse !== callbackExpect ) { matches.push( elems[ i ] ); } } return matches; } $.isWindow = function( obj ) { return obj && obj.window === obj; }; $.isPlainObject = function( obj ) { if ( type( obj ) !== 'object' || obj.nodeType || $.isWindow( obj ) ) { return false; } try { if ( obj.constructor && !hasOwn.call( obj.constructor.prototype, 'isPrototypeOf' ) ) { return false; } } catch ( ex ) { return false; } return true; }; $.isObject = function( anything ) { return type( anything ) === 'object'; }; $.trim = function( str ) { return str ? str.trim() : ''; }; $.isFunction = function( obj ) { return type( obj ) === 'function'; }; emptyArray = null; return $; });