您的位置:首页 > 产品设计 > UI/UE

学习百度UEeditor之domUtils.js

2012-11-29 20:52 323 查看
var domutils = {
on:function(obj,type,handler){
if(obj.addEventListener){
obj.addEventListener(type,handler,false);
}
else if(obj.attachEvent){
if(!handler._d){
handler._d = {};//不用全局对象,就废了
}
var key = type + handler.toString();
if(!handler._d[key]){//开始的时候写成handler[key],而
handler._d[key] = function(evt){
return handler.call(evt.srcElement,evt||window.event);
}
obj.attachEvent("on"+type,handler._d[key]);
}
}else{
obj["on"+type]=handler;
}
},
//为什么没去掉事件呢?
un:function(obj,type,handler){
if(obj.removeEventListener){
obj.removeEventListener(type,handler,false);
}
else if(obj.detachEvent){
var key = type + handler.toString();
//alert(handler._d[key])   而这里的取消事件时用的却是type,handler._d?handler._d[key]:handler,所以永远都是无能取消事件。
obj.detachEvent("on"+type,handler._d?handler._d[key]:handler);

if(handler._d&&handler._d[key]){
delete handler._d[key];
}
}
else{//这里在百度里面没有,感觉加上能更好的兼容浏览器
obj["on"+type]=null;
}
}
}

//--------------------------------------------------------Node的类型--------------------------------------------------------------------------------------

Node_Element:1

Node_attribute:2

Node_Text:3

Node_document:9

//--------------------------------------------------------inserAfter.js--------------------------------------------------------------------------------------

var insertAfter = function(node,nodeToInsert){
node.parentNode.insertBefore(nodeToInsert,node.nextSibling);
}


这个函数已经掌握,但是这个是我接触的第一个重写dom方法的函数,因为这里充分利用了已有的dom方法来扩充自己的方法,没有就写一个嘛!

//--------------------------------------------------------setStyle.js--------------------------------------------------------------------------------------

// JavaScript Document
var setStyle = function(element,name,value){//任何给定的style都可以重新改写
element.style[utils.cssStyleToDomStyle(name)] = value;
}
var setStyles = function(element,styles){//styles可以是数组或者json对象
for(var name in styles)[
if(styles.hasOwnProperty(name)){//只是重写了属于自身的样式。因为这里是层叠样式表,如font-family
setStyle(element,name,styles[name]);
}
}
}


这两个函数看起来一样,但是有很大的区别,这个正好注意到了层叠样式表,向百度前端致敬。

一个未解决的问题,大家谁知道答案希望能给我留言,多谢!

//--------------------------------------------------------removeClass--------------------------------------------------------------------------------------

var removeClass = function(element,classNames){
element.className = (' '+element.className+'').replace(
new RegExp('(?:\\s+(?:' + classNames.join("|")+'))+\\s+','g'),' ');//搞不明白(?:这个三个连着写到底是什么意思,以后再说吧!
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: