| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852 | //#region 选择器区域//var win = window;//  doc = document;//window.U.Json_ = window.$; //记录命名控件 //全局使用  解决jquery覆盖我们的选择器的问题。/*下面的写法会导致程序在window.onload之前执行,为什么要在window.onload之前执行,如果非要执行,能否把所有要做window.onload之前执行的整合在一个文件?并列明必须先执行的理由?*//*选择器前言好处:1、简化项目的代码2、当我对系统的ocument.getElementById  document.getElementsByTagName document.getElementsByClassName有奇异 觉得里面需要修改添加一些新的方法处理 可以统一处理*///#region 创建元素/**使用$$操作符简化编码长度。*例:$$("div", { "style": { "cssText": "font-size:16px;float:left;line-height:33px;width:40%;margin:0px 0px 0px 15px;" }, "innerHTML": "文件名" }, Inner_J)* @param   {string} 元素的类型tagName 例如:"div"* @param   {object} 集合,类似  { "style": { "cssText": "font-size:16px;float:left;line-height:33px;width:40%;margin:0px 0px 0px 15px;" }, "innerHTML": "文件名" }* @param   {element} 所要追加的父亲元素,把第二个参数作为孩子节点追加到第三个参数。par代表父亲元素* @param   {element} 追加的位置,如果有此参数,则把创建的元素追加到此元素的前面。此元素必须为第三个参数的孩子节点。*/U.quickCreate = window.$$ = function (str, obj, parentel, child) { //创建基本元素元素    var i, _element;    //由于createDocumentFragment和createTextNode太长,可以通过简单的方式去创建    var _obj = {        "frag": "createDocumentFragment" //碎片元素        //  "text": "createTextNode" //文本元素    };    //判断是否创建上面的元素方式    if (_obj[str]) {        _element = document[_obj[str]]();    }    //创建制定标签的元素    else {        _element = document.createElement(str);    }    //给元素添加属性    if (obj) {        U.selectEl(_element).addAttrArray(obj);    }    //如果存在父亲,则追加孩子节点。    if (parentel) {        //如果存在第四个参数,则追加到第四个参数的前面。否则,追加在最后面。        if (child) {            parentel.insertBefore(_element, child);        }        //追加到父亲元素的最后面        else {            parentel.appendChild(_element);        }    }    //返回创建的元素    return _element;}//#endregion//#region 1473用的快速选择器 去除没有必要的功能 只保留简单的选择功能/*** 初始化编辑区域** @param   {string} 选择 首先我们会定义3个获取元素的方法代替系统的 document.getElementById  document.getElementsByTagName document.getElementsByClassName* @param   {元素} 在元素下面搜索符合参数一的所有孩子节点例一、$("#U_MD_D_H");找名为U_MD_D_H唯一id。例二、$("div", UDKF):在元素UDKF下面搜索所有div元素。例三:$(".className", UDKF) 在元素UDKF下面找classname等于classname的元素。不建议用,性能太低。*/$ = U.selectEl = function (name, el) {    //调用选择器的方法    return new U.select(name, el);}/*** 初始化编辑区域** @param   {string} 选择的元素,例如"div"* @param   {document} 搜索的层次* 返回值:数组  [elment,elment,element]*    var a=U.select("div.classname",body);*    var b=U.select("input,a)*/U.select = function (selector, el) { //定义类    //设置值    this.length = 0; //选择元素的总长度    this.context = el || document; //选择器的域(在哪个元素下面选,默认是document)    //获取元素选择    this.select(selector, el); //选择元素}U.select.EVENTS = [];  //元素绑定事件存储的地方/*** 这里是选择器的方法集合**/U.select.prototype = {//原型对象使用    /**    * 定义选择器构造器    *    * @param   {string} 选择特殊字符串 包含# & []    * @param   {document} 搜索的层次    */    select: function (name, el) { //选择器选择        var _selectel;        //如果是字符串说明用户要通过选择器找到字符串        if (U.UF.C.isString(name)) {            var _r = name.substring(0, 1), //获取特殊字符 . # 或者 ""                _n = name.substring(1, name.length), //获取标签名                _doc = el || document; //去除特殊字符后            //这里是判断获取            try { //这里利用基础的选择器选取数据                 switch (_r) {                    case "#": //根据id获取 因为id获取只能通过全局搜索 但是由于项目中有存在克隆的情况 会出现id不唯一的情况                        if (_doc == document && U.UF.S.EN.test(_n)) {                            _selectel = document.getElementById(_n);                        }                        break;                    case ".": //根据className获取                        if (U.UF.S.EN.test(_n)) {                            _selectel = _doc.getElementsByClassName(_n);                        }                        break;                    case "*":                        //如果后面有输入id,那么找所有的媒体文件                        if (U.UF.S.EN.test(_n)) {                            _selectel = document[_n]; //获取媒体文件                            if (!_selectel) { //如果没有找到说明不兼容                                if (U.UF.CI.getBrowser().browser == "msie") { //ie得到媒体文件的方法                                    _selectel = document.getElementById(_n);                                }                                //非ie系列                                else {                                    _selectel = document.embeds[_n];                                }                            }                        }                        //否则就是直接找指定元素下面的所有元素                        else {                            _selectel = _doc.getElementsByTagName("*");                        }                        break;                    default: //标签的获取 //获取指定的元素                        if (U.UF.S.EN.test(name)) {                            _selectel = _doc.getElementsByTagName(name); //除去特殊字符的处理                        }                        break;                }            }            catch (e) {            }            //判断是否获取元素成功,如果上面简单的选择去不成功,那么就通过其他的选择器方案去获取            if (_selectel == null) {                _selectel = U.UF.CP.selectorElement(name, _doc); //其他选择的方式获取            }        }        //如果用户第一个参数传的是元素,那么就直接设置        else if (name) {            _selectel = name;        }        //添加元素到this里面        if (_selectel) {            this.addElement(_selectel);        }        return this;    },    /**    * 添加查找到的元素到this里    *    * @param   {elements} 选择的元素数组    */    addElement: function (els) {        //把所有获取出来的元素转化成数组,以便下面循环添加 U.UF.C.isElement(els) || els.length == null        if ((U.UF.C.isElement(els) || els.length == null) || els.toString() == "[object Window]") {            els = [els];        }        //循环所有的元素,把元素设置到this里面,这样用户获取到的元素集就能通过this[0]或者this[id]去获取了        for (var i = 0; i < els.length; i++) {            //如果元素存在的处理            this[i] = els[i];            //如果元素有id,那么给返回值添加一个id的处理,以便返回值中有以id作为key的返回值            if (els[i].id) {                this[els[i].id] = els[i];            }            this.length++; //没添加一个那么选择的元素的长度多一个        }    },    /**    * 在选择好的元素下面继续搜索子元素    *    * @param   {string} 选择特殊字符串 包含# & []    * @param   {number} 搜索的层次    */    find: function (name, item) { //获取元素的后代        var i = item || 0, //由于选择选择出来的元素是数组,所以需要筛选出第几个需要获取子节点            _length = item + 1 || this.length, //选择元素的长度            _elements = new U.select(); //由于新选择了元素,那么实例化选择器        for (; i < _length; i++) {            _elements.select(name, this[i]); //重新选择添加处理        }        return _elements; //返回最后选择的结果    },    /**    * 当前元素前一个兄弟节点    *    * @param   {string} 选择特殊字符串 包含# & []    * @param   {number} 搜索的层次    */    prev: function (item) {        var _selectel, //获取选择的元素            _selects = [], //所有选择的元素            i = item || 0, //由于选择选择出来的元素是数组,所以需要筛选出第几个需要获取子节点            _length = item + 1 || this.length, //选择元素的长度            _elements = new U.select(); //由于新选择了元素,那么实例化选择器        //循环的去获取每个元素的上级元素        for (; i < _length; i++) {            _selectel = this[i];            if (_selectel) {                //用do while去过滤文本节点,只找元素节点                do {                    _selectel = _selectel.previousSibling;                }                while (_selectel && _selectel.nodeType !== 1)            }            //找到节点追加到数组里            if (_selectel) {                _selects.push(_selectel);            }        }        //把元素添加到_elements里,并返回到前台        _elements.addElement(_selects);        return _elements;    },    /**    * 当前元素之后第一个兄弟节点    *    * @param   {string} 选择特殊字符串 包含# & []    * @param   {number} 搜索的层次    */    next: function (item) {        var _selectel, //获取选择的元素            _selects = [], //所有选择的元素            i = item || 0, //由于选择选择出来的元素是数组,所以需要筛选出第几个需要获取子节点            _length = item + 1 || this.length, //选择元素的长度            _elements = new U.select(); //由于新选择了元素,那么实例化选择器        //循环的去获取每个元素的上级元素        for (; i < _length; i++) {            _selectel = this[i];            if (_selectel) {                //用do while去过滤文本节点,只找元素节点                do {                    _selectel = _selectel.nextSibling;                }                while (_selectel && _selectel.nodeType !== 1)            }            //找到节点追加到数组里            if (_selectel) {                _selects.push(_selectel);            }        }        //把元素添加到_elements里,并返回到前台        _elements.addElement(_selects);        return _elements;    },    /**    * 获取所有的子元素    *    * @param   {number} 选择器结果里面的第几个    */    Nodes: function (item) {        item = item || 0; //由于选择选择出来的元素是数组,所以需要筛选出第几个需要获取子节点        //直接返回所有的子节点        if (this[item]) {            this[item].childNodes;        }        ;    },    /**    * 获取所有的子元素    *    * @param   {number} 选择器结果里面的第几个    */    Child: function (item) {//获取有效元素孩子节点        item = item || 0; //由于选择选择出来的元素是数组,所以需要筛选出第几个需要获取子节点        //如果选择的元素存在则获取子节点 通过U.UF.EL.getChildrenNoText 可以把 #text节点过滤        if (this[item]) {            return U.UF.EL.getChildrenNoText(this[item].childNodes)        }    },    /**    * 如果没有参数,则是查找自己的父亲,如果有参数,则查找符合条件的祖先元素。    * 如果UTF是数字n,则向上查找n层祖先。    * 如果UTF是属性,则查找符合条件的属性。    *    * @param   {number} 选择器结果里面的第几个    */    Parent: function (obj) {//获取上级父亲层        var _while,            _istrue,            _el = this[0];        obj = obj || 1; //如果没有条件,那么就是默认选取上一层的父亲        if (U.UF.C.isNumber(obj)) {            for (i = 0; i < obj; i++) {                if (_el) { //判断是否有选取                    _el = _el.parentNode;                }            }        }        else {            //循环的向上寻找制定条件的元素,最大不超过document层            _while: while (_el && _el != document) {                _istrue = true;                //循环判断条件是否匹配                for (i in obj) {                    //如果条件匹配                    if (obj[i] != _el[i] && (!_el.getAttribute || _el.getAttribute(i) != obj[i])) {                        _istrue = false;                        break;                    }                }                //如果全部条件符合,那么直接跳出                if (_istrue) {                    break _while;                }                //继续向上找                else {                    _el = _el.parentNode;                }            }        }        //返回找到的祖先层        return _el;    },    /**    * 获取所有的子元素    *    * @param   {number} 选择器结果里面的第几个    */    childs: function (item) {//获取孩子节点        return new U.select(this.Child(item));    },    /**    * 如果没有参数,则是查找自己的父亲,如果有参数,则查找符合条件的祖先元素。    * 如果UTF是数字n,则向上查找n层祖先。    * 如果UTF是属性,则查找符合条件的属性。    *    * @param   {number} 选择器结果里面的第几个    */    parentElement: function (obj, item) {//获取父亲节点        return new U.select(this.Parent(obj, item));    },    /**    * 克隆元素    *    * @param   {boolean}    设置为 true,如果您需要克隆节点及其属性,以及后代, 设置为 false,如果您只需要克隆节点及其后代    * @param   {number} 选择器结果里面的第几个    */    clone: function (deep, item) { //克隆元素 UDOD, UDID, USE        var i = item || 0,  //item 基本没有用            _returnarr = [], //返回的数据            _length = i + 1 || this.length; //克隆元素的长度        //循环克隆放入_returnarr里        for (; i < _length; i++) {            _returnarr.push(this[i].cloneNode(deep));        }        //返回选择器        return new U.select(_returnarr);    },    /**    * 把元素添加到制定的父亲层    *    * @param   {element} 添加到哪个父亲层    * @param   {number} 选择器结果里面的第几个    * @param   {element} 添加到哪个元素的上面    */    appendTo: function (parentel, item, childel) {//添加元素到制定的位置        var i = item || 0, //选择器结果里面的第几个            _length = item + 1 || this.length; //插入元素的长度        //循环条件元素        for (; i < _length; i++) {            //如果有子元素,就添加到这个子元素的前面            if (childel) {                parentel.insertBefore(this[i], childel);            }            //添加到最后面            else {                parentel.appendChild(this[i]);            }        }        return this;    },    /**    * 添加子元素    *    * @param   {element} 需要追加的元素    * @param   {number} 选择器结果里面的第几个    * @param   {element} 添加到哪个元素的上面    */    append: function (el, item, childel) {//插入元素        item = item || 0; //选择器结果里面的第几个        //如果有子元素,就添加到这个子元素的前面        if (childel) {            this[item].insertBefore(el, childel);        }        //添加到最后面        else {            this[item].appendChild(el);        }        return this;    },    /**    * 移除元素    *    * @param   {boolean}    设置为 true,如果您需要克隆节点及其属性,以及后代, 设置为 false,如果您只需要克隆节点及其后代    * @param   {number} 选择器结果里面的第几个    */    remove: function (item) {        var i = item || 0, //选择器结果里面的第几个            _length = item != null ? item + 1 : this.length; //移除的数量        //循环移除        for (; i < _length; i++) {            //判断是否有上一级            if (this[i] && this[i].parentNode) {                this[i].parentNode.removeChild(this[i]); //移除            }        }        return this;    },    /**    * 元素居中    *    * @param   {number} 选择器结果里面的第几个    */    Center: function (item) { //元素居中        var i = item || 0,  //选择器结果里面的第几个            _length = item + 1 || this.length; //居中弹出的数量        //循环弹出处理        for (; i < _length; i++) {            U.UF.F.windowTopCenter(this[i]); //居中弹出        }        return this;    },    /**    * 返回元素的大小和位置    *    * @param   {number} 选择器结果里面的第几个    */    getElementInfo: function (item) {        return U.UF.EL.getElementInfo(this[item || 0]);    },    /**    * 返回元素的大小和位置    *    * 设置单个Css属性传参说明    * @obj     {string} 必填 css属性名    * @value   {string} 必填 css属性对应的值    * @item    {number} 选填 选择器结果里面的第几个    *    * 设置多个Css属性传参说明    * @obj     {string} 必填 需设置的cssjson    *    形如:{width : '100px', height: '100px', 'backgroud-color': 'red'}    * @value   {null}   占位传参  null    * @item    {number} 选填 选择器结果里面的第几个    */    css: function (obj, value, item) {//获取指定的css值        var i = item || 0, //选择第几个            _length = item + 1 || this.length, //长度            _isobject = U.UF.C.isObject(obj);        //如果是object,那么第二个参数就是item 所以这里的 value = item        if (_isobject) {            this.addAttrArray({ "style": obj }, value);        }        //如果第一个参数是strig类型那么value需要有值,如果有值那么就是设置,否则是获取css        else if (value != null) {            //循环的设置值            for (i; i < _length; i++) {                obj = U.UF.EL.styleConversion(obj); //由于用户这边会穿 text-align 这样的值 但是在css里面 该值为 textAlign改成了大写                try {                    this[i].style[obj] = value;                } catch (e) { }            }        }        //获取css        else {            return U.UF.EL.getStyle(this[i], obj);        }        return this;    },    /**    * 添加classname    *    * @param   {string} 移除的classname    */    addClass: function (classname, item) { //添加Class        var i = item || 0, //选择第几个            _length = item + 1 || this.length; //长度        //循环给元素添加class值        for (; i < _length; i++) {            U.UF.EL.addClass(this[i], classname);        }        return this;    },    /**    * 移除classname    *    * @param   {string} 移除的classname    */    removeClass: function (classname, item) {//移除制定的class        var i = item || 0, //选择第几个            _length = item + 1 || this.length; //长度        //循环给元素移除classname        for (; i < _length; i++) {            U.UF.EL.removeClass(this[i], classname);        }        return this;    },    /**    * 判断元素是否有制定的class    *    * @param   {string} classname    */    hasClass: function (classname, item) {        item = item || 0;        return U.UF.EL.isHasClass(this[item], classname);    },    /**    * 判断元素是否有制定的class    *    * @param   {string} classname    */    attr: function (obj, value, item) { //添加属性        var j,            i, //选择第几个            _length, //长度            _isobject = U.UF.C.isObject(obj); //判断元素是否为对象        //如果是object,那么第二个参数就是item 所以这里的 value = item        if (_isobject) {            i = value || 0; //选择第几个            _length = value + 1 || this.length; //长度            //循环所有的元素添加至            for (; i < _length; i++) {                for (j in obj) {                    U.UF.EL.addAttributes(this[i], j, obj[j]); //给元素添加属性                }            }        }        //如果第一个参数是strig类型那么value需要有值,如果有值那么就是设置,否则是获取css        else if (value != null) {            i = item || 0; //选择第几个            _length = item + 1 || this.length; //长度            //循环的设置值            for (i; i < _length; i++) {                U.UF.EL.addAttributes(this[i], obj, value); //给元素添加属性            }        }        //获取属性,        else {            return this[item || 0].getAttribute(obj);        }        return this;    },    /**    * 移除属性    *    * @param   {string} classname    */    rmAttr: function (name, item) { //移除属性        U.UF.EL.delAttributes(this[item || 0], name); //移除元素        return this;    },    /**    * 添加属性    *    * @param   {string} classname    */    addAttrArray: function (obj, item) {//赋值区域        var j, k,            _newcsstext,            _csstype,            _csstext = "", //csstext            i = item || 0, //选择第几个            _length = item + 1 || this.length; //长度        //循环的处理每个元素赋值        for (; i < _length; i++) {            //循环所有的属性            for (j in obj) {                //css的添加方式                if (j == "style") {                    _csstext = "";                    _newcsstext = obj[j]["cssText"];                    for (k in obj[j]) {                        _csstype = U.UF.EL.styleConversion(k, true); //把所有的cssText转成css-text,因为css在拼接的时候是以这种形式                        //cssText的设置方式,添加一份新的csstext                        if (_csstype == "css-text") {                            continue;                        }                        //如果是其他普通样式的添加,那么就拼接                        else if (k in this[i][j]) {                            _csstext += _csstype + ":" + obj[j][k] + ";";                        }                        //自定义属性的设置,情况比较少,但是在做兼容方案的时候可能会用到                        else {                            this[i][j][k] = obj[j][k];                        }                    }                    //如果需要设置cssText的处理                    if (_newcsstext) {                        _csstext = this[i][j]["cssText"] + ";" + _newcsstext + ";" + _csstext;                    }                    //如果是undefined或者是null这样不设置值的处理                    else if (_newcsstext !== "") {                        _csstext = this[i][j]["cssText"] + ";" + _csstext;                    }                    this[i][j]["cssText"] = _csstext;                }                //出css以外的添加方式 如 onclick事件赋值 classname赋值                else {                    //如果是事件类型的,又是字符串类型,那么这里把它转化成函数                    if (j.indexOf("on") == 0 && U.UF.C.isString(obj[j])) {                        this[i][j] = new Function(obj[j]); //字符串转化成function                        continue;                    }                    //&& "string".indexOf(U.UF.C.getType((_UVE = UDE[j]))) > -1                    //如果是字符串,同时又是系统属性,那么通过setAttribute的方式设置属性,该方式设置属性可以让属性在网页调试模式下看到如<div kk="kk"> kk为自定义属性                    else if (U.UF.C.isString(obj[j]) && U.UF.EL.isCustomAttributes(this[i], j)) {                        //由于低版本的浏览器会报错,这里用try catch                        try {                            this[i].setAttribute(j, obj[j]);                        }                        catch (e) {                        }                    }                    try {                        this[i][j] = obj[j];                    }                    catch (e) { }                }            }        }        return this;    },    /**    * 隐藏元素    *    * @param   {string} classname    */    hide: function (item) {        this.css({ "display": "none" }, item);    },    /**    * 显示元素    *    * @param   {string} classname    */    show: function (item) { //显示元素        this.css({ "display": "block" }, item);    },    /**    * 获取长度    *    */    width: function () {        return U.UF.EL.getElementRealWidth(this[0]);    },    /**    * 获取长度    *    */    height: function () {        return U.UF.EL.getElementRealHeight(this[0]);    },    /**    * 鼠标移入的时候触发,由于onmouseover会出发多次 这里做兼容    *    * @param   {string} classname    */    mouseenter: function (cb, item) { //enter事件        //设置移入函数        this.addAttrArray({            "onmouseover": function () {                U.UF.EV.stopBubbleMouseOutOrOver(this, cb); //判断用户移入的时候出发元素,进行判断元素是否移入            }        }, item);        return this;    },    /**    * 鼠标移出的时候触发,由于onmouseout会出发多次 这里做兼容    *    * @param   {string} classname    */    mouseleave: function (cb, item) { //leave事件        //设置移入函数        this.addAttrArray({            "onmouseout": function () {                U.UF.EV.stopBubbleMouseOutOrOver(this, cb); //判断用户移入的时候出发元素,进行判断元素是否移入            }        }, item);        return this;    },    /**    * 鼠标移出的时候触发,由于onmouseout会出发多次 这里做兼容    *    * @param   {string} classname    */    gt: function (item) { //索引大于的元素        var i = item,  //item 基本没有用            _returnarr = [], //返回的数据            _elements = new U.select(); //由于重新筛选数据,那么需要新建一个选择器        //循环筛选元素        for (; i < this.length; i++) {            _returnarr.push(this[i]);        }        //循环添加到this里面        _elements.addElement(_returnarr);        return _elements;    },    /**    * 鼠标移出的时候触发,由于onmouseout会出发多次 这里做兼容    *    * @param   {string} classname    */    lt: function (item) {        var i = 0,  //item 基本没有用            _returnarr = []; //返回的数据        //循环筛选元素        for (; i < item; i++) {            _returnarr.push(this[i]);        }        //循环添加到this里面        return new U.select(_returnarr); //由于重新筛选数据,那么需要新建一个选择器    },    /**    * 元素事件绑定    *    * @param   {string} classname    */    bind: function (obj, value, item) {        var j,            i, //选择第几个            _length, //长度            _isobject = U.UF.C.isObject(obj); //判断元素是否为对象        //如果是object,那么第二个参数就是item 所以这里的 value = item        if (_isobject) {            i = value || 0; //选择第几个            _length = value + 1 || this.length; //长度            //循环所有的元素添加至            for (; i < _length; i++) {                for (j in obj) {                    U.UF.EV.addElementEvent(j, this[i], obj[j]); //添加事件绑定                    //添加事件                    U.select.EVENTS.push({                        element: this[i], //绑定事件                        event: j, //事件                        fun: obj[j] //函数                    });                }            }        }        //如果第一个参数是strig类型那么value需要有值,如果有值那么就是设置,否则是获取css        else if (value != null) {            i = item || 0; //选择第几个            _length = item + 1 || this.length; //长度            //循环的设置值            for (i; i < _length; i++) {                U.UF.EV.addElementEvent(obj, this[i], value); //添加事件绑定                //添加事件                U.select.EVENTS.push({                    element: this[i], //绑定事件                    event: obj, //事件                    fun: value //函数                });            }        }        return this;    },    /**    * 元素解除事件绑定    *    * @param   {string} classname    */    unbind: function (obj, value, item) { //事件绑定取消        var j,            i, //选择第几个            k,            _length, //长度            _isobject = U.UF.C.isObject(obj); //判断元素是否为对象        //如果是object,那么第二个参数就是item 所以这里的 value = item        if (_isobject) {            i = value || 0; //选择第几个            _length = value + 1 || this.length; //长度            //循环所有的元素添加至            for (; i < _length; i++) {                for (j in obj) {                    U.UF.EV.delElementEvent(j, this[i], obj[j]); //删除事件绑定                    for (k = 0; k < U.select.EVENTS.length; k++) {                        if (U.select.EVENTS[k].element == this[i] && U.select.EVENTS[k].event == j && U.select.EVENTS[k].fun == obj[j]) {                            U.select.EVENTS.splice(k, 1);                            k--;                        }                    }                }            }        }        //如果第一个参数是strig类型那么value需要有值,如果有值那么就是设置,否则是获取css        else if (obj != null) {            i = item || 0; //选择第几个            _length = item + 1 || this.length; //长度            //循环的设置值            for (i; i < _length; i++) {                for (k = 0; k < U.select.EVENTS.length; k++) {                    if (U.select.EVENTS[k].element == this[i] &&                        U.select.EVENTS[k].event == obj &&                        (value == null || U.select.EVENTS[k].fun == value)) {                        U.UF.EV.delElementEvent(obj, this[i], U.select.EVENTS[k].fun); //添加事件绑定                        U.select.EVENTS.splice(k, 1);                        k--;                    }                }            }        }        //如果没有传key和value去移除,那么就移除元素所有绑定的事件        else {            i = item || 0; //选择第几个            _length = item + 1 || this.length; //长度            for (i; i < _length; i++) {                for (k = 0; k < U.select.EVENTS.length; k++) {                    if (U.select.EVENTS[k].element == this[i]) {                        U.UF.EV.delElementEvent(U.select.EVENTS[k].event, this[i], U.select.EVENTS[k].fun); //添加事件绑定                        U.select.EVENTS.splice(k, 1);                        k--;                    }                }            }        }        return this;    }}//#endregion
 |