一段js代码,如果不用jquery的API,该怎么写?

rayzhao 发布于 2013/04/15 23:25
阅读 534
收藏 1

copy oschina的一段js代码,但是又不想导入jquery-1.7.1.min.js,这样的话这段代码该怎么改写?对js不熟,对jquery就更不了解了,现在把js代码贴出来,请大家帮忙修改一下 ,谢谢。


Utils = (function() {
var instance;
function Utils() {
instance = this;
return this;
}


/**
* 事件自动绑定 events:<br>
* 事件映射列表 映射规则:<br>
* "event(事件) -> selector(选择器)":"handler(事件处理器)"<br>
* events = { <br>
* "click->[document]":"doc_click_handler" <br> }<br>
* <span style="color:#A00">[注]</span>如果selector带有中括号[]则表明为系统全局变量,如window,document<br>
* 需要以 call(module) 的方式把上下文设置成当前的模块实例

* @example g_utils.binder.call(module)
* @method binder
*/
Utils.prototype.binder = function(cur) {
if (isEmpty(cur))
cur = this;
var events = this.Events;
if (isEmpty(events))
return;
var clazz = className(this);
if (isEmpty(clazz))
this.clazz = clazz = "Plugin";
Console.log("[" + clazz + "]Binding events");
try {
$.each(events, function(key, handler) {
if (isEmpty(events))
return;


var handler = events[key];
if (isEmpty(key))
return;


var sp = key.split("->");
var evt = sp[0];
var sel = sp[1];
if (isEmpty(evt) || isEmpty(sel) || isNotFunc(cur[handler]) && isNotFunc(handler))
return;
var one = function(event) {
if (isNotFunc(handler)) {
return cur[handler].call(this, cur, event);
} else {
return handler.call(this, cur, event)
}
};
var hasWindowObj = sel.indexOf("[window]") != -1;
var hasDocumentObj = sel.indexOf("[document]") != -1;
if (hasWindowObj) {
$(window).unbind(evt, one);
$(window).bind(evt, one);
sel = sel.replace(/[\[window\]]/g, "")
}


if (hasDocumentObj) {
$(document).unbind(evt, one);
$(document).bind(evt, one);
sel = sel.replace(/[\[document\]]/g, "")
}


if (isEmpty(sel))
return;


Console.log("\t[" + clazz + "]Binding event[" + handler + "]");


$(sel).die(evt).live(evt, one);


})
} catch (e) {
Console.log("Error Occured When Binding Events:" + e);
}
};
return Utils;
})();


/**
 * Utils 类实例[全局]
 * 
 * @attribute g_utils
 */
g_utils = new Utils();


/**
 * 判断当前对象是否为空
 * 
 * @method isEmpty
 * @param {Object}
 *            obj
 * @return {Boolean} empty 当为 null,undefined,"" 将返回true
 */
window.isEmpty = function(obj) {
return (obj == null || typeof obj == "undefined" || obj.length == 0)
}


/**
 * 判断当前对象是否非空
 * 
 * @method isNotEmpty
 * @param {Object}
 *            obj
 * @return {Boolean}
 */
window.isNotEmpty = function(obj) {
return !isEmpty(obj);
}


/**
 * 判断是否为函数
 * 
 * @method isFunc
 * @param {Object}
 *            fun
 * @return {Boolean}
 */
window.isFunc = function(fun) {
return (fun != null && typeof fun == "function");
}


/**
 * 判断不是函数
 * 
 * @method isNotFunc
 * @param {Object}
 *            fun
 * @return {Boolean}
 */
window.isNotFunc = function(fun) {
return !isFunc(fun);
}


/**
 * 判断 cur 是否为 type 类型
 * 
 * @method typeOf
 * @param {Object}
 *            cur
 * @param {String}
 *            type
 * @example typeOf("Hello","string");//将返回true
 * @return {Boolean}
 */
window.typeOf = function(cur, type) {
if (typeof type != "string")
return false;
return typeof cur == type;
}


/**
 * 判断是否为数组
 * 
 * @method isArray
 * @param {Object}
 *            array
 * @return {Boolean}
 */
window.isArray = function(array) {
return isNotEmpty(array) && className(array) == "Array"
}


/**
 * 判断不是数组
 * 
 * @method isNotArray
 * @param {Object}
 *            arr
 * @return {Boolean}
 */
window.isNotArray = function(arr) {
return !isArray(arr);
}


/**
 * 获取当前模块名
 * 
 * @method className
 * @param {Object}
 *            obj
 * @example className(g_utils);//返回 "Utils"
 * @return
 */
window.className = function(obj) {
if (obj && obj.constructor && obj.constructor.toString) {
var arr = obj.constructor.toString().match(/function\s*(\w+)/);
if (arr && arr.length == 2) {
obj.clazz = arr[1]
return arr[1];
}
}
return undefined;
}








window.console = window.console || {};


console.log || (console.log = typeof opera != "undefined" ? opera.postError : function(msg) {
});






ConsoleUtils = (function() {
var open = false;
function ConsoleUtils(op) {
open = op;
}
ConsoleUtils.prototype.toggle = function() {
open = !open;
};
ConsoleUtils.prototype.open = function() {
open = true;
}
ConsoleUtils.prototype.close = function() {
open = false;
}
ConsoleUtils.prototype.log = function(msg) {
if (open)
console.log(msg);
}
return ConsoleUtils;
})();


Console = new ConsoleUtils(false);


var oschina = (function(window) {


var default_params = {
my_tips : "#MySpace"
};


var events = {
// 为自定义select控件注册事件
"mouseenter mouseleave->.control_select" : function() {
$(this).find(".cs_content").toggle();
}
};


var oschina = {
Events : events,
modules:{},
init : function() {
g_utils.binder.call(this);
return this;
},


_replace_html_tags : function(str) {
if (!str)
return '';
str = str.replace(/</ig, '&lt;');
str = str.replace(/>/ig, '&gt;');
return str;
}
};


return oschina.init();
})(window);


加载中
返回顶部
顶部