JavaScript基础(二)

1.页面加载事件

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;

        }
    </style>
    <script>
        window.onload = function() {
            var demo = document.getElementById("demo");
            demo.style.backgroundColor = "red";
        }
    </script>
</head>
<body>
<div id="demo">
</div>
</body>
</html>

总结:window.onload用法详解:
网页中的javaScript脚本代码往往需要在文档加载完成后才能够去执行,否则可能导致无法获取对象的情况,为了避免这种情况的发生,可以使用以下两种方式:
一.将脚本代码放在网页的底端,这样在运行脚本代码的时候,可以确保要操作的对象已经加载完成。
二.通过window.onload来执行脚本代码。
第一种方式感觉比较凌乱(其实推荐使用),往往我们需要将脚本代码放在一个更为合适的地方,那么window.onload方式就是一个良好的选择。window.onload是一个事件,当文档加载完成之后就会触发该事件,可以为此事件注册事件处理函数,并将要执行的脚本代码放在事件处理函数中,于是就可以避免获取不到对象的情况。

2.数组的常用操作

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: #ffff00;
        }
    </style>
</head>
<body>
<div>

</div>
</body>
</html>
<script>
    //  push 组
    var arr = [1,3,5,7];   // 原数组
    arr.push(9);  //把 9 添加 arr 的最后面
    console.log(arr);   //  13579
    console.log(arr.push(11));  // 返回的是数组的长度 6
    console.log(arr);  // 1.3.5.7.9.11
    // unshift 组
    var  arr1 = ["a","b","c"];
    arr1.unshift("你好");
    console.log(arr1);  // ["你好", "a", "b", "c"]
    console.log(arr1.unshift("今天"));  // 返回数组的长度  5
    console.log(arr1);

    // pop()  删除最后一个元素   并且返回最后一个值
    var arrpop = [1,2,3,4,5];
    arrpop.pop();  // 删除一次  把 5删掉了   [1,2,3,4]
    console.log(arrpop);  // [1,2,3,4]
    console.log(arrpop.pop());  // 把 4 删掉   剩下  [1,2,3]  返回的是 4
    console.log(arrpop);  // [1,2,3]

    // shift 删除第一个元素    并且返回第一个值
    var arrshift = ["a","b","c"];
    console.log(arrshift.shift()); //  a
    console.log(arrshift);  // [b,c]
    arrshift.shift();  // 吧b  删掉了, 并且返回 b
    console.log(arrshift);  // 只剩下一个c

   // 连接数组
    var aa = [1,2,3];
    var bb = ["a","b","c"];
    console.log(aa.concat(bb));  // 新的数组 [1, 2, 3, "a", "b", "c"]
    console.log(aa);
    console.log(bb);

   // join  将数组转换为字符串
    var arrjoin = ["2015","12","2"];
    console.log(arrjoin.join("-"));  //  2015-12-2   字符串
    console.log(arrjoin.join("+")); //  2015+12+2
    console.log(arrjoin.join("*")); //  2015*12*2
    console.log(arrjoin);  //  结果是原数组   不影响本数组

    // split 将字符串转换为数组
    var txt = "2015-12-2";
    var text = "中国 山东 威海 小渔村";
    console.log(txt.split("-"));
    console.log(text.split(" "));
    //  <div class="one demo test"> </div>


</script>

2.1 获取className

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
</head>
<body>
<div>
    <div></div>
</div>
<div></div>
<div></div>
<div class="two one"></div>
<div></div>
<div></div>
<div class="one"></div>
<div></div>
<div></div>
<div class="one"></div>
</body>
</html>
<script>
    var ones = document.getElementsByClassName("one");  // 所有的类名
    for(var i=0;i<ones.length;i++) {
        ones[i].style.backgroundColor = "purple";
    }
</script>

2.2 封装获取类名兼容性写法

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div class="demo nav test"></div>
<div></div>
<div class="demo"></div>
<div></div>
<div></div>
<div></div>
<div class="demo"></div>
<div></div>
<div></div>
<div></div>
</body>
</html>
<script>
    //  分两部分 ,首先是浏览器支持de
    function getClassName(classname) {   // 形参
        //  先看看浏览器支不支持
        if(document.getElementsByClassName) {   // 如果支持这个写法
            return document.getElementsByClassName(classname);  // 直接返回所有元素
        }
        // 下面的语句是ie678 执行
        // 核心思想   把所有的标签都取过来, 然后一个一个的判断当前元素的类名是不是  classname
        //是就留下,不是 就走开
        // alert(11);
        var arr = [];  //数组用来存储满足条件的 元素
        var dom = document.getElementsByTagName("*");  // 把所有的标签都取过来 *  所有的
        // 去过所有的标签之后, 把 每一个标签的类名 (字符串) 转换为数组 , 只有数组才可以遍历
        for(var i=0;i<dom.length;i++) {  // 遍历每一个标签
            // 把每一个标签的类名 转换为数组
            var arrName = dom[i].className.split(" "); 
            for(var j=0;j<arrName.length;j++) {  // 遍历 arrname
                if(arrName[j] == classname) { // 判断
                    arr.push(dom[i]); // 把当前满足条件的元素  给 arr
                }
            }
        }
        return arr;  // 返回总的数组
    }
    console.log(getClassName("demo").length);  // 实参
</script>

总结:核心思想 就是把所有的标签都取过来, 然后一个一个的判断当前元素的类名是不是 classname

3. 节点

3.1 父节点

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="demo">
    <div id="xiongda">
        <div id="xionghaizi"></div>
    </div>
</div>
</body>
</html>
<script>
    var xionghai = document.getElementById("xionghaizi");
    console.log(xionghai.parentNode.parentNode.id);// demo
</script>

3.2 兄弟节点

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div>1</div>
<div id="two">2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
</body>
</html>
<script>
    var two = document.getElementById("two");
    var next = two.nextElementSibling || two.nextSibling;// two的下一个节点。就是 3
    next.style.backgroundColor = "purple"; // 设置3的背景为紫色
</script>

3.3 第一个孩子

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="father">
    <div class="son">123</div>
    <div class="son">123</div>
    <div class="son">123</div>
    <div class="son">123</div>
    <div class="son">123</div>
</div>
</body>
</html>
<script>
  var father = document.getElementById("father");
    // father.firstChild.style.backgroundColor = "gray";
    var first = father.firstElementChild || father.firstChild;  // 兼容得到 第一个亲儿子
    var last = father.lastElementChild || father.lastChild;  //  兼容得到最后一个儿子
    first.style.backgroundColor = "gray";
    last.style.backgroundColor = "gray";
</script>

3.4 孩子们1

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="demo">
    <div>1</div>
    <div>2</div>
    <div>3</div>
</div>
</body>
</html>
<script>
    var demo = document.getElementById("demo");
    // alert(demo.childNodes.length);  // 结果是 7 个 ,包含了 4个 换行
    var nodes = demo.childNodes;  // 获取了所有的孩子节点  包含 div  包含 换行等等 7
    for(var i=0;i<nodes.length;i++) {
        if(nodes[i].nodeType == 1) {  // nodetype 是1  表示 元素节点
            nodes[i].style.backgroundColor = "red";
        }
    }
</script>

3.5 孩子们2

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="demo">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>3</div>
    <!--我是注释-->
    <!--<div>3</div>-->
</div>
</body>
</html>
<script>
    var demo = document.getElementById("demo");
    // alert(demo.children.length);
    var child = demo.children;   // demo 里面所有的 标签
    alert(child.length);
    child[0].style.backgroundColor = "red";   // 第一个孩子
    child[child.length-1].style.backgroundColor = "red";   // 最后一个孩子
</script>

4.dom操作

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="demo">
    <div class="one"></div>
</div>

</body>
</html>
<script>
    var demo = document.getElementById("demo");
    var test = document.createElement("div");  // 创建了一个新的div
    // a.appendChild(b)  把b放到a 里面
    demo.appendChild(test);   // 把test 追加到  demo 里面
</script>

4.1 点击动态生成li

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<button id="btn">点击</button>
<ul id="demo">

</ul>
</body>
</html>
<script>
    var btn =document.getElementById("btn");
    var demo = document.getElementById("demo");
    btn.onclick = function() {
        var newLi = document.createElement("li");  // 新li
        demo.appendChild(newLi);
    }
</script>

4.2 插入节点

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="demo">
    <div id="xiongda"></div>
</div>
</body>
</html>
<script>
    var demo = document.getElementById("demo");
    var newDiv = document.createElement("div");  // 新div
    var xiongda = document.getElementById("xiongda");
    demo.appendChild(newDiv);
    var newSpan = document.createElement("span");
    demo.insertBefore(newSpan,newDiv);  // 1 参数  插入的子节点   2 参数 参照节点
</script>

4.3 设置属性

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        .box {
            width: 100px;
            height: 100px;
            background-color: pink;
        }
    </style>
</head>
<body>
<div id="demo" class="demo">
    <div id="xiongda"></div>
</div>
</body>
</html>
<script>
    var demo = document.getElementById("demo");
    var newDiv = document.createElement("div");  // 新div
    var xiongda = document.getElementById("xiongda");
    demo.appendChild(newDiv);
    var newSpan = document.createElement("span");
    demo.insertBefore(newSpan,newDiv);  // 1 参数  插入的子节点   2 参数 参照节点
    newDiv.setAttribute("class","box");   //  等价于  newDiv.className = "box"
    demo.removeAttribute("class");
</script>

4.4 设置多个css属性cssText

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div></div>
</body>
</html>
<script>
    var div = document.getElementsByTagName("div")[0];
   /* div.style.width = '100px';
    div.style.height = '100px';
    div.style.backgroundColor = 'pink';*/
    div.style.cssText = "width:100px;height:100px; background-color:purple";
</script>

4.5 删除节点

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="demo">
    <div id="one"></div>
</div>
</body>
</html>
<script>
    var demo = document.getElementById("demo");
    var one = document.getElementById("one");
    demo.removeChild(one);
</script>

4.6 复制节点

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div id="demo">
    <div id="damao"></div>
    <div id="ermao"></div>
</div>

</body>
</html>
<script>
    var demo = document.getElementById("demo");
    // demo.cloneNode(true);  // 克隆节点
    demo.parentNode.appendChild(demo.cloneNode(true));
</script>

5.日期、定时器

5.1 声明日期函数

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

</body>
</html>
<script>
    var date = new Date();  // 创建日期
    console.log(date);  // Mon Jul 10 2017 05:25:37 GMT+0800 (CST)
    console.log(date.getMonth()+1); // 7 月份从0开始所以要+1
    console.log(date.getFullYear());// 2017
</script>

5.2 日历

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        .date {
            width: 200px;
            height: 220px;
            background-color: #369;
            margin: 100px auto;
            text-align: center;
            padding-top:25px;
        }
        .date span {
            color: white;
        }
        .date p {
            width: 120px;
            height: 120px;
            background-color: darkorange;
            margin:50px auto  0;
            line-height: 120px;
            font-size: 70px;
        }
    </style>
</head>
<body>
<div class="date" id="date">
    <span></span>
    <p></p>
</div>
</body>
</html>
<script>
    var box = document.getElementById("date");  // 最大盒子
    var date = new Date();  // 声明 创建 日期
    var arr = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]; // date.getDate获取这个星期的第几日。从星期日开始算的。
    box.children[1].innerHTML = date.getDate();
    box.children[0].innerHTML = date.getFullYear() + "年" + (date.getMonth()+1) + "月" +
    date.getDate() + "日 " + arr[date.getDay()];
</script>

5.3 定时器

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

</body>
</html>
<script>
    setInterval("console.log('你好吗')",1000); // 每隔一秒钟输出一次你好吗
</script>

5.4 获取毫秒数的几种方法

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

</body>
</html>
<script>
    var date = new Date();
    console.log(date.getTime()); //1499637296786
    console.log(date.valueOf()); // 1499637296786
    console.log(Date.now()); // 1499637296786
    console.log(+new Date()); // 1499637296786
</script>

5.5 倒计时

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            font-size:30px;
            color: red;
            text-align: center;
        }
    </style>
</head>
<body>
<div id="demo"></div>
</body>
</html>
<script>
    var demo = document.getElementById("demo");
    var endTime = new Date("2018/12/12 17:30:00");   // 目标时间
    setInterval(timer,1000);  // 每隔1000毫秒就调用一次 timer 这个 函数
    // 根据相差的毫秒数,计算出天数小时分钟等等。
    function timer() {
        var nowDate = new Date();  // 现在时间 getTime得到是毫秒  /  10000 后 得到的是秒
        var second = parseInt((endTime.getTime() - nowDate.getTime()) / 1000); // 根据现在和目标的秒差可以算出相差的时分秒,一小时3600秒。
        // 还剩下多少时间  单位是秒
        // console.log(second);
        var d = parseInt(second / 3600 / 24);  // 天数 second / 3600 得 小时 / 24 的天数 
        //console.log(d); // %24 得到剩余的 h 。 24小时为一天,一个周期。
        var h = parseInt(second / 3600 % 24); // 小时  用总的小时数 %24  不超过24小时,一天24小时一个周期,取余就是不足的周期有多少小时
        console.log(h)
        var m = parseInt(second / 60 % 60);  // 分钟   不超过  60分  一分有60秒,一分60秒为一个周期。分数取余,得到不足的周期分钟数
        console.log(m);
        var s = second % 60;   // 还剩下秒数 
总结:周期取余得到不足的数。如以总的小时%24得出不足的小时的数量
        console.log(s);
        d<10 ? d = "0" + d : d;   // 小于10 的时候我们给与 补 0    a++    不同于   a= a + 1
        h<10 ? h = "0" + h : h;
        m<10 ? m = "0" + m : m;
        s = s<10 ? "0"+s : s;
        function flag(obj) {
            return obj = obj<10 ? "0" + obj : obj;
        }
        demo.innerHTML = "距离抢购还剩下" + d + "天" + h + "小时" + m + "分" + s + "秒";
        demo.innerHTML = "距离抢购还剩下" + flag(d) + "天" + h + "小时" + m + "分" + s + "秒";
    }
 </script>

6.运算符

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
</body>
</html>
<script>
    console.log(0||1);  // 1  || 前面错的,后面对的 返回后面
    console.log(1||0);  // 1 || 两个都对返回前面的
    console.log(1||5);  // 1
    console.log(5||1); // 5
   var a = 0 || 1 || 2;
   var b = 1 || 0 || 3;
   console.log(a),console.log(b); // 1 1
   var a = 1+4&&3;   // 3  && 前面是对的,返回后面的结果
   var b = 0&& 3+1;  // 0  && 前面是错的,直接返回前面
   var c= 1 || 2 && 5-1;  // 1
   alert(a),alert(b),alert(c);
</script>

7.字符串

7.1 转换成字符串

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
</body>
</html>
<script>
    var num = 10;
    console.log(typeof typeof num); //  "number"
    console.log("num");   // 是 num   不是   "10"
    console.log(typeof (num+ "")); // string
    console.log(typeof String(num)); // string
    var test = 19;
    console.log(typeof (test.toString())); // string
    var demo = 10;
    console.log(demo.toString(2));    // 把 demo 里面值 转换为 2进制 1010
</script>

7.2根据位置返回字符

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
</body>
</html>
<script>
    var txt = "abcdefg";
    alert(txt.charAt(3));  // 返回 索引号3 的 字符    d
    var demo = "今天是周末";
    alert(demo.charAt(2));  //   返回   是
    alert(txt.charCodeAt(3));  // 返回的是相应的 字符 的 unicode 编码 100
    alert(demo.charCodeAt(2)); // 26159
</script>

7.3 检测字符串长度

<script>
var txt = "what are you 伐木累!";
//如果是英文等字母就+1,如果是汉字就 +2
function getStringlenght(string){
var code = 0;
var len = 0;
for(var i =0;i<string.length;i++){
code = string.charCodeAt(i);
if(code>=0 && code<=127){ // 表示这是英文
len++;
}else{
len + =2 ; //表示这是汉字 长度+2
}
}
return len;
}
console.log(getStringLenght(txt));
</script>

7.3根据字符串返回位置

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
</body>
</html>
<script>
    var txt = "今天是周末是很开心的一天啊";
    alert(txt.indexOf("是"));
    alert(txt.lastIndexOf("是"));  // 从后面往前面找, 找到后,索引号 数的时候从前面往后数
</script>

7.4 url编码和解码

为什么要进行url编码:http://www.cnblogs.com/jerrysion/p/5522673.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
</body>
</html>
<script>
    var url = "localhost:itcast.cn? name=andy";
    var str = encodeURIComponent(url);  // 编码的过程
    console.log(str); // localhost%3Aitcast.cn%3F%20name%3Dandy
    console.log(decodeURIComponent(str)); // 解码 localhost:itcast.cn? name=andy
</script>

7.4 截取字符串

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script>
        window.onload = function() {
            var div1 = document.getElementById("div1").innerHTML;
            var div2 = document.getElementById("div2").innerHTML;
            function onButtonClick(id,txt) {
                document.getElementById(id).onclick = function() {
                    this.nextSibling.innerHTML = txt;   //按钮的下一个兄弟是 span
                }
            }
            // slice
            onButtonClick("btn1",div1.concat(div2));
            onButtonClick("btn2",div1.slice(3));  // 从3开始截取div1
            onButtonClick("btn3",div1.slice(3,6));  // 从3开始截取div1  到6
            onButtonClick("btn4",div1.slice(-1));  // 从3开始截取div1  到6
           // substr
            onButtonClick("btn5",div1.substr(3));  // 从3开始截取div1
            onButtonClick("btn6",div1.substr(3,6));  // 从3开始截取div1
            onButtonClick("btn7",div1.substr(-1));  // 从3开始截取div1
            onButtonClick("btn8",div1.substr(div1.length-1,1));
            //  div1.length-1  是最后一个字母
            // substring
            onButtonClick("btn9",div1.substring(3));
            onButtonClick("btn10",div1.substring(3,6));
            onButtonClick("btn11",div1.substring(6,3));
            onButtonClick("btn12",div1.substring(-1));
        }
    </script>
</head>
<body>
<div id="div1">my name is andy!</div>
<div id="div2">what's your name?</div>
<button id="btn1">concat</button><span></span> <br/>
<button id="btn2">slice(3)</button><span></span> <br/>
<button id="btn3">slice(3,6)</button><span></span> <br/>
<button id="btn4">slice(-1)</button><span></span> <br/>
<button id="btn5">substr(3)</button><span></span> <br/>
<button id="btn6">substr(3,6)</button><span></span> <br/>
<button id="btn7">substr(-1)</button><span></span> <br/>
<button id="btn8">substr(-1兼容写法)</button><span></span> <br/>
<button id="btn9">substring(3)</button><span></span> <br/>
<button id="btn10">substring(3,6)</button><span></span> <br/>
<button id="btn11">substring(6,3)</button><span></span> <br/>
<button id="btn12">substring(-1)</button><span></span> <br/>
</body>
</html>

7.5 保留小数

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
</body>
</html>
<script>
    var PI = 3.1415;
    console.log(PI.toFixed(2)); // 3.14 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。
</script>

7.6转换大小写

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
请输入: <input type="text" id="txt"/>  <button id="btn">发布</button>
<h1 id="big">输入大标题</h1>
<span id="small">小标题</span>
</body>
</html>
<script>
    function $(id)  {return document.getElementById(id);}
    $("btn").onclick = function() {
        $("big").innerHTML = $("txt").value.toUpperCase();  // 转换为大写
        $("small").innerHTML = $("txt").value.toLowerCase()  // 转换为小写
    }
</script>

7.8 验证上传文件

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<input type="file" name="" id="file"/><span></span>  <!--文件域-->
</body>
</html>
<script>
    var file = document.getElementById("file");
    file.onchange = function() {  // 下拉列表
        //   alert(11);
        // alert(this.value);   // c://imags/1.png1
        // 我们要开始进行判断  我们上传的文件是否是合法的
      //  1.jpg   1.jepg    1.JPG    1.JPEG  都是合法的
        // 1.doc.jpg  也是对的
        // 后缀名 我们应该从  后面开始找  .
        var path = this.value;
        // 得到完整路径    c://imags/1.png
        var suffix = path.substr(path.lastIndexOf(".")).toUpperCase();  // 取后缀名
        //alert(suffix);
        //  path.lastIndexOf(".")   "c://imags/1.png".lastIndexOf(".")  == 12
        //path.substr(12)  "c://imags/1.png".substr(12);   .png
        if(suffix == ".JPG" || suffix == ".JPEG" || suffix == ".PNG") {
            this.nextSibling.innerHTML = "格式正确";
        }
        else {
            this.nextSibling.innerHTML = "格式不正确";
        }
    }
</script>

8.简单模拟jquery$选择器

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        div {
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
<div id="demo">1</div>
<div>2</div>
<div>2</div>
<div class="test">3</div>
<div>2</div>
<div class="test">3</div>
<div>2</div>
<div>2</div>
<div>2</div>
<div>2</div>
</body>
</html>
<script>
    function getClassName(classname) {   // 形参
        //  先看看浏览器支不支持
        if(document.getElementsByClassName) {   // 如果支持这个写法
            return document.getElementsByClassName(classname);  // 直接返回所有元素
        }
        // 下面的语句是ie678 执行
        // 核心思想   把所有的标签都取过来, 然后一个一个的判断当前元素的类名是不是  classname
        //是就留下,不是 就走开
        // alert(11);
        var arr = [];  //数组用来存储满足条件的 元素
        var dom = document.getElementsByTagName("*");  // 把所有的标签都取过来 *  所有的
        // 去过所有的标签之后, 把 每一个标签的类名 (字符串) 转换为数组 , 只有数组才可以遍历
        for(var i=0;i<dom.length;i++) {  // 遍历每一个标签
            // 把每一个标签的类名 转换为数组
            var arrName = dom[i].className.split(" "); // "demo nav test"   = ["demo","nav","test"];
            // var arrName = ["demo","nav","test"];  // 用来存储每一个 类名的数组
            for(var j=0;j<arrName.length;j++) {  // 遍历 arrname
                if(arrName[j] == classname) { // 判断
                    arr.push(dom[i]); // 把当前满足条件的元素  给 arr
                }
            }
        }
        return arr;  // 返回总的数组
    }
   /* $('#demo')    jquery 里面的
    $('.demo')
    $("div")*/
    function $(str) {
        var s = str.charAt(0);   // 相当于 取  #  .  d   取 符号
        var ss = str.substr(1);  // 相当于 demo  test  iv   除了符号
        switch(s) {
            case "#":
                return document.getElementById(ss);
            break;
            case ".":
                return getClassName(ss);
            break;
            default :
                return document.getElementsByTagName(str);
        }
    }
    $("#demo").style.backgroundColor = "red";
    for(var i=0;i<$(".test").length;i++)
    {
        $(".test")[i].style.backgroundColor = 'purple';
    }
   console.log($("div").length);
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值