模拟jquery封装选择器

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
  <title></title>
  <script>
   //测试模拟tquery选择器封装的效果
    
        function btn_click(){
            console.log($("#btnName").val());
        }

        function btn_setValue(){
            $("#btnName").val("hello world");
        }
    
    /*封装的id、class、元素选择器的选择操作*/
    var $=function(selector){
        this.tqObject=new TQObject();
        //id选择器的操作
        if(selector.substring(0,1)=="#"){
            var elem=document.getElementById(selector.substring(1,selector.length));
            tqObject.data.push(elem);//存入tqObject对象的数组中
        }else if(selector.substring(0,1)=='.'){
            //类选择器的操作
            var elems=document.getElementsByTagName('*');//获取页面中的所有元素
            var className=selector.substring(1);//获取className
            var reg=new RegExp("(^|\\s)"+className+"($|\\s)");//定义正则表达式
            for(var i=0;i<elems.length;i++){
                if(reg.test(elems[i].className)){//如果匹配上,则存入tqObject对象的数组中
                    this.tqObject.data.push(elems[i]);
                }
            }
        }else{
            //标签选择器
            var elems=document.getElementsByTagName(selector);
            this.tqObject.data=elems;
        }
        return tqObject;
    }

    /*封装选择器
    *封装TQObject对象,提供一个数组元素,以及若干自定义的操作方法
    *通过封装$("#id|.class|element")来获取元素
    */

    /*封装TQObject对象*/
    var TQObject=function(){
        this.data=[];
    }
   
    TQObject.prototype={
        //TQObject添加原型方法

        //返回data数组的个数
        size:function(){
            return this.data.length;
        },

        //封装innerHTML
        html:function(content){
            if(content){
                //为元素设置html值(xx.innerHTML="")
                for(var i=0;i<this.data.length;i++){
                    //innerHTML兼容性比较好
                    this.data[i].innerHTML=content;
                }
            }else{
                //获取html值(return xx.innerHTML)
                if(this.data.length!=0){
                    return this.data[0].innerHTML;
                }
                return;
            }
        },


        //获得/设置value属性
        val:function(value){
            if(value){
                //为value属性设置值
                for(var i=0;i<this.data.length;i++){
                    this.data[i].value=value;
                    //this.data[i].setAttribute("value",value);
                }
                return this;//为了使用连缀的效果
            }else{
                if(this.data.length!=0){
                    return this.data[0].value;
                    //return this.data[0].getAttribute("value");
                }
            }
        },

        //获得/设置任意属性
        attr:function(name,value){
            //如果有两个参数
            if(name && value){
                for(var i=0;i<this.data.length;i++){
                    //这里只能处理出现在标签中的属性
                    this.data[i].setAttribute(name,value);
                }
                return this;
            }else if(name){
                if(this.data.length!=0){
                    return this.data[0].getAttribute(name);
                }
            }
        },

        //追加样式
        addClass:function(className){
            for(var i=0;i<this.data.length;i++){
                var elem=this.data[i];
                if(elem.getAttribute("class")){
                    //如果有class属性了
                    var oldClassName=elem.getAttribute("class");
                    var newClassName=oldClassName+""+className;
                    elem.setAttribute("class",newClassName);
                }else{
                    //设置class属性
                    elem.setAttribute("class",className);
                }
            }
        },

        //移除样式
        /*removeClass(className)  移除指定样式
          removeClass()           移除所有样式
        */
        removeClass:function(className){
            if(className){
                //删除指定名称的样式
                //<input class="a b c"/>
                for(var i=0;i<this.data.length;i++){
                    var arr=this.data[i].getAttribute("class").split(" ");//得到一个数组
                    var newClassName="";
                    for(var j=0;j<arr.length;j++){
                        if(arr[j]==className){
                            continue;
                        }
                        newClassName+=arr[j]+" ";
                        newClassName=newClassName.substring(0,newClassName.length-1);
                        this.data[i].setAttribute("class",newClassName);
                    }
                    return this;
                }
            }else{
                //移除所有类样式
                for(var i=0;i<this.data.length;i++){
                    this.data[i].setAttribute("class","");
                }
                return this;
            }
        }
    };
  </script>
 </head>

 <body>
  <div class="redBorder" id="myDiv"></div>
  <div class="redBorder"></div>
  <div class="grayBorder"></div>
  <input type='text' id="btnName"/>
  <input type="button" value="测试" onclick="btn_click()"/>
  <input type="button" value="设置值" onclick="btn_setValue()"/>
 </body>
</html>

 

转载于:https://www.cnblogs.com/zeng91/p/5955761.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值