标签 JavaScript 下的文章

变量声明

var 老的(逐渐淘汰)

let (推荐)

const 常量
var存在的问题:
1.允许变量重复声明
2.不限制修改
3.不支持块级作用域 – 函数级
let const 的优点:
1.不允许变量重复声明
2.const可以限制修改
3.支持块级作用域 – {}

块级作用域好处:
1.不容易重名
2.每个代码块都有自己的变量副本(这点对普通的if之类的影响不大,但对循环里影响特别大)

for循环里用var声明



<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
    <button type="button">aaa</button>
    <button type="button">bbb</button>
    <button type="button">ccc</button>
    <script>
        let aBtn = document.querySelectorAll('button');

        for (var i = 0; i < aBtn.length; i++) {
            aBtn[i].onclick = function() {
                alert(i);
            }
        }
    </script>
    <!-- 
        {
            var i=0;
            aBtn[i].onclick = function() {
                alert(i);  // 3
            };
        }
        {
            var i=1;
            aBtn[i].onclick = function() {
                alert(i);  // 3
            };
        }
        {
            var i=2;
            aBtn[i].onclick = function() {
                alert(i);  // 3
            };
        }

        在这个循环里i 只有一个
        因为var是不带块级作用域的,所以就只有一个副本
        换句话说就是在循环过程中i都是同一个,如果其中一个变了,其他的都会变,跟着受影响

    -->

</body>

</html>

for循环里用let声明


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
    <button type="button">aaa</button>
    <button type="button">bbb</button>
    <button type="button">ccc</button>
    <script>
        let aBtn = document.querySelectorAll('button');

        for (let i = 0; i < aBtn.length; i++) {
            aBtn[i].onclick = function() {
                alert(i);
            }
        }
    </script>
    <!-- 
        {
            let i=0;
            aBtn[i].onclick = function() {
                alert(i);  // 0
            };
        }
        {
            let i=1;
            aBtn[i].onclick = function() {
                alert(i);  // 1
            };
        }
        {
            let i=2;
            aBtn[i].onclick = function() {
                alert(i);  // 2
            };
        }

        let就不一样了,它是一个块级作用域,每个代码块都有自己的变量副本。for也是一个代码块,for本身也在这个代码块当中
        在这个循环里i 一共有三个,且这些i都是完全互相不打扰的,任何一个i变了,其他的不会跟着变

    -->

</body>

</html>

变量作用域(scope)

全局

在所有函数之外声明的 – 可以在任何地方使用 (不推荐)
全局变量在任何地方都可以使用,之所以非常危险,是因为任何人都可以修改,也容易重名



let a=12;
function show(){
    alert(a);
}
show();
console.log(a);

局部

声明在函数内的变量叫做‘局部变量’ – 只能在函数内部使用



function show(){
    let a=12;
    
    alert(a);
};
show();

//报错
console.log(a);
// Uncaught ReferenceError: a is not defined

块级

if{} for{} function{} ...都是块级作用域
类似局部作用域,只不过在一定程度上分的更细了


<div id="box" class="text">使用classlist属性设置class属性</div>

使用元素的classList属性可以访问或者添加删除修改元素的class属性

element.classList

使用classList属性访问class属性


let oDiv = document.querySelector('#box');
console.log(oDiv.classList);
// DOMTokenList ["text", value: "text"]

element.classList.add()

通过classList调用add()的方法可以添加一个或者多个class属性,多个用,隔开


// 添加fonts一个class属性
oDiv.classList.add('fonts');
// 同时添加fonts和red两个class属性
oDiv.classList.add('fonts', 'red');

element.classList.remove()

remove()移除,移除一个或者多个class属性,多个用,隔开


// 删除fonts一个class属性
oDiv.classList.remove('fonts');
// 点击删除fonts和red两个class属性
oDiv.onclick = function() {
    this.classList.remove('fonts', 'red');
}

element.classList.toggle()

在元素中切换类名。
toggle()中的第一个参数必须参数,当元素中存在该指定的class属性时,将移除该class属性,反之就添加。
第二个参数为强制添加(参数为true时)或移除(参数为false时)第一个参数指定的class属性。


oDiv.classList.add('red');
oDiv.onclick = function() {
    // 切换class
    this.classList.toggle('fonts');
}

 // 强制移除一个class为fonts的属性 
oDiv.classList.toggle("fonts", false);
// 强制添加一个class为red的属性 
oDiv.classList.toggle("red", true);

element.classList.contains()

检测元素是否包含某个class 返回布尔值


// 检测元素是否包含类名为 e 的这个属性
let bool = oDiv.classList.contains('e');
console.log(bool);
// false

// 检测元素是否包含类名为 text 的这个属性
let bool = oDiv.classList.contains('text');
console.log(bool);
// true

模拟单选


<body>
    <div class="wrap">
        <h2>模拟单选</h2>
        <div class="option">
            <a href="javascript:;" class="checked">男</a>
            <a href="javascript:;">女</a>
            <a href="javascript:;">保密</a>
        </div>
    </div>
    <script>
        // 通过css选择器获取div中的所有a元素,返回一个类数组
        let oBtns = document.querySelectorAll('.option a');

        // console.log(oBtns.length);
        // 
        for (let i = 0; i < oBtns.length; i++) {
            // console.log(i);

            // oBtns获取的是一组a的类数组,既然是伪数组,就可以使用下标去获取某一个值
            // 使用循环的数值,从0开始的 i 值,每一次拿到的都是不同的a,不同的添加事件
            oBtns[i].onclick = function() {
                // 每次点击时先消除其他元素上的class
                for (let j = 0; j < oBtns.length; j++) {
                    oBtns[j].classList.remove('checked');
                }
                // 然后给点击的元素添加上class
                this.classList.add('checked');
            }
        }
    </script>
</body>

DEMO展示

模拟复选


<body>
    <div class="wrap">
        <h2>模拟复选</h2>
        <div class="option">
            <a href="javascript:;" class="checked">油桃</a>
            <a href="javascript:;">菠萝</a>
            <a href="javascript:;">葡萄</a>
        </div>
    </div>
    <script>
        let oBtns = document.querySelectorAll('.option a');

        // console.log(oBtns.length);
        for (let i = 0; i < oBtns.length; i++) {
            oBtns[i].onclick = function() {
                this.classList.toggle('checked');
            }
        }
    </script>
</body>

DEMO展示


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
    <div id="box" class="box1">
        <a href="#">html</a>
        <a href="#">css</a>
        <a href="#">javascript</a>
    </div>
</body>

</html>

getElementById

通过id去获取元素


document.getElementById('box')

querySelector

可以使用它们的 id, , 类型, 属性, 属性值等来选取元素


// 使用id去选中
document.querySelector('#box')

// 使用class去选中
document.querySelector('.box1')

// 使用元素去选中
document.querySelector('div')

// 使用父子元素去选中的写法
document.querySelector('body div')
// 使用父子元素去选中div下的a元素时,querySelector只返回匹配的第一个元素
document.querySelector('.box1 a')

querySelectorAll

document.querySelectorAll()方法返回文档中与指定的CSS选择器或者标签等匹配的所有元素


// 获取页面中所有的 <a> 元素
document.querySelectorAll('a');

// 获取id为box元素下所有的 <a>  元素
let oAs = document.querySelectorAll('#box a');
console.log(oAs.length);

// 获取class为box1元素下所有的 <a>  元素
let oAs = document.querySelectorAll('.box1 a');
// 设置第二个a元素的字体颜色为白色
oAs[1].style.color = '#fff';

学前端也有段时间了,js放着几个月了,都快凉了,到今天为止也还没学多少,归根于近期比较忙,事多的要命,而且还是在大山里做的,一待就是好几天(貌似并是不偷懒的理由╭(╯^╰)╮,好吧,我承认,这段时间我确实懒了点!!!∑(゚Д゚ノ)ノ),时间匆匆的走了,我还在原地一样,自己掉队了,进度慢了点,我还在努力,对自己说一声加油!未来继续努力,离年底不远了,得学出一点成绩才行(〃'▽'〃)
下边是一个js入门小练习,html+css结合js里的var 和for 做出来的!
代码如下:
HTML:


    <div id="box"></div>
    <div id="eject">
        <div id="set">
            <p id="p1">
                <font>背景:</font>
                <span style="background:#e91e63;"></span>
                <span style="background:#009688;"></span>
                <span style="background:#2196f3;"></span>
            </p>
            <p id="p2">
                <font>宽度:</font>
                <span>100px</span>
                <span>200px</span>
                <span>300px</span>
            </p>
            <p id="p3">
                <font>高度:</font>
                <span>100px</span>
                <span>200px</span>
                <span>300px</span>
            </p>
            <button style="margin-left:45%;" id="done">完成</button>
        </div>
    </div>
    <button id="btn">设置</button>


CSS:


*{margin:0;padding:0}
#box{width:100px;height:100px;border:2px solid #eee;border-radius:10px;background-color:red}
#eject{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.5);display:none}
#set{width:230px;height:150px;background:#fff;border-radius:8px;position:absolute;top:50%;left:50%;margin-top:-75px;margin-left:-115px;font-size:14px;font-family:"Microsoft yahei"}
#set p{height:40px;line-height:40px}
#set p font{margin-left:10px;font-weight:700}
#set p span{margin-left:10px;cursor:pointer}
#set p span:hover{color:#ff5722}
#p1 span{display:inline-block;width:30px;height:20px;margin-left:15px}
#btn{border:0;outline-style:none;background:#3cbbf1;border:1px solid #3cbbf1;border-radius:5px;color:#fff;margin-top:15px}


JS:


        window.onload=function(){
            var oBtn=document.getElementById("btn");
            var oEject=document.getElementById("eject");
            var oDone=document.getElementById("done");
            var oBox=document.getElementById("box");
            var oSpan=document.getElementsByTagName("span");

            oBtn.onclick=function(){
                oEject.style.display="block" ;
            };
            oDone.onclick=function(){
                oEject.style.display="none" ;
            };

            for (var i=0;i<9;i++)
            {
                if (i>=0 && i<3)
                {
                   oSpan[i].onclick=p1;
                }
                else if (i>=3 && i<6)
                {
                    oSpan[i].onclick=p2;
                }
                else
                {
                    oSpan[i].onclick=p3;
                }
            }

            function p1 (){
                oBox.style.background = this.style.background;
            };
            function p2 (){
                oBox.style.width= this.innerHTML;
            }
            function p3 (){
                oBox.style.height=this.innerHTML;
            }
        }


DEMO演示

扒自后宫学长,转自小尾巴点击下方查看效果。


style="border-radius:10px !important"
frameborder="no"
border="0"
marginwidth="0"
marginheight="0"
width=100%
height=600
src="http://demo.xiaowiba.com/main/click">



style="border-radius:10px !important"
frameborder="no"
border="0"
marginwidth="0"
marginheight="0"
width=100%
height=600
src="http://moshanghua.cc/demo/slide.html">