javascript选择器的封装,只需要写元素名或css类及id都可以选择到元素

//模仿jquery选择器样式,只需要写元素名或css类及id都可以选择到元素

html 复制代码
<html>
    <head>
        <meta http-equiv="Content-Type:text/html;charset=utf=8"/>
        <link rel="shortcut icon" href="#"/>
        <title>封装选择器</title>
       
    </head>
    <style type="text/css">
        .context 
        {
            color:black;
            font-size: 16px;
           
            width: 300px;
            height: 300px;
        }
        .div
        {
            border: 1px solid blue;
        }


    </style>

    <body>
        <div class="context div" >这是文本内容

        <ul>
                <li class="listyle"><input type="text" name="user" value=""/></li>
                <li class="listyle"><input type="password" name="pwd" value=""/></li>
                <li class="listyle"><input type="password" name="pwd1" value=""/></li>

        </ul>
        </div>
        
        <script type="text/javascript">
            
            Function.prototype.addMethods=function(name,fn)
            {
                this.prototype[name]=fn;
            }

            function selectEle(selector)
            {
               var selector=this.trim(selector);
               this.elements=[];
               var node;
               if(selector.indexOf(' ')!==-1)
               {

                   node=this.getClass(selector)[0];
                   
                   if(node)
                   {
                    this.elements.push(node);
                   }else if(node=this.getTagName(selector))
                   {
                    if(node.length>1)
                    {
                        for(var i=0;i<node.length;i++)
                        {
                            this.elements.push(node[i]);
                        }
                    }
                    
                   }else
                   {
                    throw "请输入正确的选择符";
                   }
                   
               }else if(selector.indexOf('[')!==-1)
               {
                    var selector=selector.slice(1,-1);
                    node=this.getAttr(selector);
                    //console.log(this.getAttr(selector));
                    if(node)
                    {
                        this.elements.push(node);
                    }else
                    {
                        alert("请输入正确的选择符");
                    }
               }
               else
               {
                    if(/^[#|.]/.test(selector))
                    {
                        node=this.getCss(selector);
                        if(node)
                        {
                            this.elements.push(node);
                        }
                        else
                        {
                            alert("请输入正确的选择符");
                        }
                    }else
                    {
                    
                        node=this.getTagName(selector);
                        
                        if(node.length==1)
                        {
                            this.elements.push(node[0]);
                        }else if(node.length>1)
                        {
                            for(var i=0;i<node.length;i++)
                            {
                                this.elements.push(node[i]);
                            }
                        }else
                        {
                            alert('请输入正确的选择符');
                        }
                    
                    }   
               }
               
              return this.elements;
                
            }
            selectEle.addMethods('getClass',function(selector){
                return document.getElementsByClassName(selector);
            });

            selectEle.addMethods('getCss',function(selector){
                try{
                    return document.querySelector(selector);
                }catch(err)
                {
                    alert(err);
                }
                
            });

            selectEle.addMethods('getTagName',function(selector){
                try{
                    
                    return document.querySelectorAll(selector);
                }catch(err)
                {
                    alert(err);
                }
                
            });

            selectEle.addMethods('getAttr',function(selector){
                try
                {
                    var tag=document.body.getElementsByTagName('*');
                    var ele=[];
                    if(selector.indexOf('=')==-1)
                    {

                        for(var i=0;i<tag.length;i++)
                    {
                        
                        if(tag[i].getAttribute(selector)!=undefined && tag[i].tagName !="SCRIPT")
                        {
                            ele.push(tag[i]);
                        }
                        
                    }
                    
                    }else
                    {
                        var selector=selector.split('=');
                        for(var i=0;i<tag.length;i++)
                        {
                            var att=tag[i].getAttribute(selector[0]);
                            //console.log(att);
                            if(att && att!=="text/javascript" && att!=="text/css")
                            {
                                
                                if(att.toString().toLocaleLowerCase()===selector[1].toString().toLocaleLowerCase())
                                {
                                    ele.push(tag[i]);
                                }
                            }
                        }

                    }
                    return ele;
                }catch(err)
                {
                    alert(err);
                }
                    
            });

            //只是为测试IE7/8写的临时兼容去空白函数
           selectEle.addMethods('trim',function(str){
            return str.replace(/^\s\s*/,'').replace(/\s\s*$/,'');
           });
          
            var $=function(args)
            {
                return new selectEle(args);
            }
            
         


           console.log($('li'));
           
       </script>  
    </body>
</html>
相关推荐
寻星探路8 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
lly2024069 小时前
Bootstrap 警告框
开发语言
2601_9491465310 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
曹牧10 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
KYGALYX10 小时前
服务异步通信
开发语言·后端·微服务·ruby
zmzb010310 小时前
C++课后习题训练记录Day98
开发语言·c++
猫头虎11 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
Moment11 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
YUJIANYUE12 小时前
PHP纹路验证码
开发语言·php
爱敲代码的小鱼12 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax