搜尋

首頁  >  問答  >  主體

JavaScript:輸入指定類型的選擇器(只需支援id,class,tagName三種簡單CSS選擇器)

1.寫一個JavaScript函數,輸入指定類型的選擇器(只需支援id,class,tagName三種簡單CSS選擇器,無需相容組合選擇器)

問題是:下面的正規符合看不懂,var reg = /^(#)?(.)?(w )$/img;var regResult = reg.exec(selector); ,具體如下

var query = function(selector) {
                var reg = /^(#)?(\.)?(\w+)$/img;
                var regResult = reg.exec(selector);
                var result = [];
                //如果是id选择器
                if(regResult[1]) {
                    ...
                }
                //如果是class选择器
                else if(regResult[2]) {
                    ...
                      
                }
                //如果是标签选择器
                else if(regResult[3]) {
                    ...
            }
}
       
PHP中文网PHP中文网2748 天前1060

全部回覆(4)我來回復

  • 扔个三星炸死你

    扔个三星炸死你2017-06-26 10:59:53

    /^(#)?(.)?(w+)$/img
    拆一下//之間的是正則的內容後面img是正則的匹配方式
    i:ignorCase忽略大小寫
    m:mutiple允許多行匹配
    g:globle進行全域匹配,指匹配到目標字串的結尾

    正規內容:^(#)?(.)?(w+)$ ^代表以xxx開頭$代表以xxxx結尾
    (#)?可以帶一個或不帶#
    (.)? 可以帶.或者沒有.
    (w+) 匹配一個或多個單字

    回覆
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-26 10:59:53

    /^(#)?(.)?(w+)$/img

    1. (#)? 匹配ID的

    2. (.)? 匹配className

    3. (w+) 剩下都是標籤名或[1,2]中具體的ID或className名稱

    回覆
    0
  • ringa_lee

    ringa_lee2017-06-26 10:59:53

    謝遙。

    請參考 @trionfo1993

    回覆
    0
  • 迷茫

    迷茫2017-06-26 10:59:53

    給你一個,我寫的utils中的dom片段

    class dom extends base{
    
        constructor(){
            super();
        }
        // 根据ID获取指定DOM
        byId(_id){
            return document.getElementById(string.replace(_id,'#',''));
        }
        // 根据ID或Class获取DOM
        get(_id){
            if(_id.indexOf('.') > -1){
                let list = document.getElementsByClassName(string.replace(_id,'\.',''));
                this._object = Array.from(list);
            }else{
                this._object = [this.byId(_id)];
            }
            
            return this;
        }
        // 根据Name获取相关DOM
        byName(_name){
            let list = document.getElementsByName(_name);
            if(list.length > 0)
                return Array.from(list);
            return null;
        }
        // 返回dom原型
        get valueOf(){
            if(this._object.length >1){
                return this._object;    
            }
            return this._object[0];
        }
        // 基础DOM操作方法
        _dom_ctrols(_func){
            for(let info of this._object){
                _func(info);
            }
            return this;
        }
        // 增加class
        addClass(_name){
            this._dom_ctrols((info)=>{
                if(info.className.indexOf(_name) == -1){
                    info.className += ' ' + _name;
                }
            })
            return this;
        }
        // 删除class
        removeClass(_name){
            this._dom_ctrols((info)=>{
                info.className = string.replace(info.className,_name,'');
            })
            return this;
        }
        // 显示?隐藏DOM主方法
        _hide_show(_value){
            this._dom_ctrols((info)=>{
                info.style.display = _value;
            });
        }
        // 隐藏DOM
        hide(){
            this._hide_show('none');
        }
        // 显示DOM
        show(){
            this._hide_show('block');
        }

    回覆
    0
  • 取消回覆