前端----JQ

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="ok">
        <div class="yes">
            <p>item1</p>
            <p>item2</p>
            <p>item3</p>
        </div>
        <div class="yes">
            <p>item1</p>
            <p>item2</p>
            <p>item3</p>
        </div>
    </div>
</body>
<script src="myJq.js"></script>
<script>
   var es= $("#ok .yes p")
   console.log(es);
</script>
</html>

js

//管理标签
//els:Array
function Ele(els){
    this.els=els||[];
}

//对外使用
function $(arg){
    return myjq(arg)
}
//arg="#ok .yes p"
function myjq(arg){
    //1.将字符串格式化
    var reg=/^\s+|\s+$/g;
    arg=arg.replace(reg,'');
    reg=/\s{2,}/g;
    arg=arg.replace(reg,' ');
    //2.分割字符串
    var arr=arg.split(' ');
    // arr=["#ok",".yes","p"]
    // 3.逐级找到对应的元素
    var els=getEls(arr);
    return new Ele(els);
}

 // arr=["#ok",".yes","p"]
function getEls(arr){
    var parent = [document];
    var children = [];

    for(var i=0;i<arr.length;i++){
        //拿到需要找元素的关键词
        var key=arr[i];
        // 遍历parent,从每一个父元素中寻找
        for(var j=0;j<parent.length;j++){
        var par=parent[j];
        children=children.concat(findEls(par,key));
    }
    parent=children;
    children=[];//务必置空

}
return parent;
}
function findEls(par,key){
       var c=key.substr(0,1);//截取首字符
       if(c === "#"){
        return [par.getElementById(key.substr(1))]
       }else if(c ==="."){
        var es=par.getElementsByClassName(key.substr(1));
        var arr =[];
        for(var i=0;i<es.length;i++){
            arr.push(es[i]);
        }
        return arr;
       }else{
        var es=par.getElementsByTagName(key);
        var arr =[];
        for(var i=0;i<es.length;i++){
            arr.push(es[i]);
       }
       return arr;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值