[js] querySelector、querySelectorAll、getElementById。封装选择器
#
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <ul id='a'>
            <li class='b'>0</li>
            <li class='b'>1</li>
            <li class='b'>2</li>
            <li class='b'>3</li>
            <li class='b'>4</li>
        </ul>
        <script>
            //querySelector返回该元素后代元素中,第一个匹配选择器参数的后代元素。
            //如果没有匹配项,则返回 null。否则,返回第一个匹配的元素。
            
            //a与aa是一样的
            var a = document.body.querySelector('#a');
            console.log(a);
            console.log(a.innerText);
            var aa = document.body.querySelector('ul');
            console.log(aa);
            console.log(aa.innerText);
            
            //b与bb是一样的
            var b = document.body.querySelector('.b');
            console.log(b);
            console.log(b.innerText);
            var bb = document.body.querySelector('li');
            console.log(bb);
            console.log(bb.innerText);
            
            //querySelectorAll返回值是一个NodeList对象,所以不推荐使用 for...in去遍历它(会遍历出其他无关属性)
            //想要在它身上使用数组方法,必须先把它转换为真正的数组.
            var c = document.body.querySelectorAll('#a');
            console.info(c);
            console.info(c.innerText); //undefined    
            for (var i = 0; i < c.length; i++) {
                console.info(c[i]);
            }
            //for...in除了nodelist还会遍历出其他信息
            for (var k in c) {
                console.warn(c[k]);
            }
            
            //var d = document.body.querySelectorAll('#a').querySelector('.b');//不能这样用
            var e = document.getElementById("a").querySelector('.b');
            console.log(e);
            var f = document.getElementById("a").querySelectorAll('.b');
            console.log(f);
            var g = document.getElementById("a");
            console.log(g);
            var h = document.body.querySelector("#a");
            console.log(h);
            var i = document.body.querySelectorAll("#a");
            console.log(i);            
        </script>
    </body>
</html>
#
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            html,
            body,
            ul,
            li {
                margin: 0;
                padding: 0;
                border: 0;
                list-style: none;
            }
        </style>
    </head>
    <body>
        <ul>
            <li class='branch bb'>1
                <div>aaa</div>
            </li>
            <li class='aa'>2
                <div>b</div>
            </li>
            <li class='aa'>3
                <div>c</div>
            </li>
            <li class='aa'>4
                <div>d</div>
            </li>
        </ul>
        <ul>
            <li class='branch bb'>1
                <div>axx</div>
            </li>
            <li class='aa'>2
                <div>b</div>
            </li>
            <li class='aa'>3
                <div>c</div>
            </li>
            <li class='aa'>4
                <div>d</div>
            </li>
        </ul>
        <script>
            var a = document.querySelectorAll('#trunk');
            var b = document.querySelectorAll('.branch');
            var c = document.querySelectorAll('.aa');
            var d = document.querySelectorAll('li');
            console.log(a);
            console.warn(b);
            console.log(c);
            console.log(d);
            var QM = (function() {
                var $ = function(Selector, Action, Func, Bind) {
                    if (Action) {
                        var i = 0;
                        var picker = document.querySelectorAll(Selector);
                        if (Bind !== 'off') {
                            while (i < picker.length) {
                                picker[i].addEventListener(Action, Func);
                                ++i;
                            }
                        } else {
                            while (i < picker.length) {
                                picker[i].removeEventListener(Action, Func);
                                ++i;
                            }
                        }
                    } else {
                        return document.querySelectorAll(Selector)[0];
                    }
                }
                return $;
            })();
            //          QM('#trunk', 'click', function() {
            //              console.log(this.innerHTML);
            //          });
            //          QM('.aa div', 'click', function() {
            //              console.log(this.innerHTML);
            //          });    
            QM('ul .bb div', 'click', function() {
                console.log(this.innerHTML);
            });
            QM('.bb').innerHTML = 'fsdfj123';
            (function($) {
                $.c = 'plus';
                $.d = function(v) {
                    console.log('xxoo', v);
                }
            })(QM);
            console.log(QM.c);
            QM.d('xx->');
        </script>
    </body>
</html>
#
var query = function(selector) { var reg = /^(#)?(\.)?(\w+)$/img; var regResult = reg.exec(selector); var result = []; //如果是id选择器 if(regResult[1]) { if(regResult[3]) { if(typeof document.querySelector === "function") { result.push(document.querySelector(regResult[3])); } else { result.push(document.getElementById(regResult[3])); } } } //如果是class选择器 else if(regResult[2]) { if(regResult[3]) { if(typeof document.getElementsByClassName === 'function') { var doms = document.getElementsByClassName(regResult[3]); if(doms) { result = converToArray(doms); } } //如果不支持getElementsByClassName函数 else { var allDoms = document.getElementsByTagName("*") ; for(var i = 0, len = allDoms.length; i < len; i++) { if(allDoms[i].className.search(new RegExp(regResult[2])) > -1) { result.push(allDoms[i]); } } } } } //如果是标签选择器 else if(regResult[3]) { var doms = document.getElementsByTagName(regResult[3].toLowerCase()); if(doms) { result = converToArray(doms); } } return result; } function converToArray(nodes){ var array = null; try{ array = Array.prototype.slice.call(nodes,0);//针对非IE浏览器 }catch(ex){ array = new Array(); for( var i = 0 ,len = nodes.length; i < len ; i++ ) { array.push(nodes[i]) } } return array; }
#
                    
                
                
            
        
浙公网安备 33010602011771号