欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

js一些基础知识2

程序员文章站 2022-06-30 19:55:11
...
72、按钮控制选项卡,加左右按钮实现
<style>
    #box div{
        width: 200px;
        height: 100px;
        border: 1px solid #000000;
        display:none;
    }
    #box .on{
        background: red;
    }
</style>
<script>
    window.onload = function(){
        var oBox = document.getElementById('box');
        var aBtn = oBox.getElementsByTagName('input');
        var aDiv = oBox.getElementsByTagName('div');
        var oPrev = document.getElementById('prev');
        var oNext = document.getElementById('next');

        var iNow = 0;
        for(var i = 0; i<aBtn.length;i++){
            aBtn[i].index = i;
            aBtn[i].onclick = function(){
                iNow = this.index;
                tab();
            };
        }

        function tab(){
            for(var i = 0; i< aBtn.length; i++){
                aBtn[i].className = '';
                aDiv[i].style.display = 'none';
            }
            aBtn[iNow].className = 'on';
            aDiv[iNow].style.display = 'block';
        }


        //前一个
        oPrev.onclick = function(){
            iNow--;
            if (iNow < 0){
                iNow = aBtn.length - 1;
            }
            tab();
        };
        //后一个
        oNext.onclick = function(){
            iNow++;
            if (iNow >= aBtn.length){
                iNow = 0;
            }
            tab();
        };
    };
</script>
</head>
<body>
<div id="box">
    <a href="javascript:;" id="prev">☜</a>
    <input type="button" class="on" value="体育">
    <input type="button" value="娱乐">
    <input type="button" value="新闻">
    <input type="button" value="新闻2">
    <a href="javascript:;" id="next">→</a>
    <div style="display:block;">1111111111</div>
    <div>1122111111</div>
    <div>222222222222</div>
    <div>333333333333333333333333</div>
</div>

</body>
73、自动播放选项卡,定时运行按钮选项卡中的next
<style>
    #box div{
        width: 200px;
        height: 100px;
        border: 1px solid #000000;
        display:none;
    }
    #box .on{
        background: red;
    }
</style>
<script>
    window.onload = function(){
        var oBox = document.getElementById('box');
        var aBtn = oBox.getElementsByTagName('input');
        var aDiv = oBox.getElementsByTagName('div');

        var iNow = 0;
        for(var i = 0; i<aBtn.length;i++){
            aBtn[i].index = i;
            aBtn[i].onclick = function(){
                iNow = this.index;
                tab();
            };
        }

        function tab(){
            for(var i = 0; i< aBtn.length; i++){
                aBtn[i].className = '';
                aDiv[i].style.display = 'none';
            }
            aBtn[iNow].className = 'on';
            aDiv[iNow].style.display = 'block';
        }
        //后一个
        function next(){
            iNow++;
            if (iNow >= aBtn.length){
                iNow = 0;
            }
            tab();
        };

        setInterval(next,2000)
    };
</script>
</head>
<body>
<div id="box">
    <input type="button" class="on" value="体育">
    <input type="button" value="娱乐">
    <input type="button" value="新闻">
    <input type="button" value="新闻2">
    <div style="display:block;">1111111111</div>
    <div>1122111111</div>
    <div>222222222222</div>
    <div>333333333333333333333333</div>
</div>

</body>
74、延时选项卡(京东):onmouseover,setTimeout定时器里的this坏了-- _this=this;

<style>
    #box div{
        width: 200px;
        height: 100px;
        border: 1px solid #000000;
        display:none;
    }
    #box .on{
        background: red;
    }
</style>
<script>
    window.onload = function(){
        var oBox = document.getElementById('box');
        var aBtn = oBox.getElementsByTagName('input');
        var aDiv = oBox.getElementsByTagName('div');
        var timer;
        for(var i = 0; i<aBtn.length;i++){
            aBtn[i].index = i;
            aBtn[i].onmouseover = function(){
                var _this = this;
                timer = setTimeout(function(){
                    for(var i = 0; i< aBtn.length; i++){
                        aBtn[i].className = '';
                        aDiv[i].style.display = 'none';
                    }
                    _this.className = 'on';
                    aDiv[_this.index].style.display = 'block';

                },200);

            };
            aBtn[i].onmouseout = function(){
                clearTimeout(timer);
            };
        }
    };
</script>
</head>
<body>
<div id="box">
    <input type="button" class="on" value="体育">
    <input type="button" value="娱乐">
    <input type="button" value="新闻">
    <div style="display:block;">1111111111</div>
    <div>222222222222</div>
    <div>333333333333333333333333</div>
</div>

</body>

75、QQ头像 事件连等 76、封闭空间: (function(){alert(1);})(); 用途:1)解决变量冲突 (小红和你同时用 oBtn) 2)循环里面加定时器,定时器里的i也不能用了--封闭空间解决 77、arguments:实参数组 78、with(重复代码){} 79、cssText:设置样式,兼容性没问题,没什么必要使用

80、字符串:
取某一个 str.charAt()
#str.indexOf(小字符串);
<script>
    var str = 'abcdefdsfd';
    //alert(str.indexOf('e')); // 4
    //alert(str.indexOf('cde'));  //2
    //alert(str.indexOf('d')); //3
    //alert(str.indexOf('x'));  //-1
    alert(str.indexOf('D'));
</script>

#浏览器判断 UA:navigator.userAgent
Chrome Firefox MSIE
扩展:IE11不再包含MSIE,判断方法:(sUA.toLowerCase().indexOf("trident") > -1 && sUA.indexOf("rv") > -1);
<script>
    if (navigator.userAgent.indexOf('Chrome') != -1){
        alert('这里是chrome');
    }else if(navigator.userAgent.indexOf('Firefox') != -1){
        alert('这里是火狐');
    }else if(navigator.userAgent.indexOf('MSIE') != -1){
        alert('这里是ie');
    }
    //alert(typeof navigator.userAgent);

</script>

#str.lastIndexOf(小字符串);

#str.substring(开始位置,结束位置); //结束位置不包含想要的最后那个
str.substring(开始位置); //截取到最后
   <script>
    var str = 'width';
    //alert(str.substring(1,3));//id
    alert(str.substring(1)); //idth
   <script>

#str.split(切的方式); //切成了数组
split(''); //切碎
   <script>
        /*var str = 'welcome-to-beijing';
        alert(str.split('-')[1]);*/
        var str = 'welcome to beijing';
        //alert(str.split(' '));
        alert(str.split(''));
   <script>

str.toUpperCase(); //转大写
str.toLowerCase(); //转小写

#字符串比较:
1)英文单词 字典序
2)数字(字符串) 字典序
3)数字,数字(字符串) 先转为数字,再比较
4)汉字,没规律, unicode编码 0x4e00 到 0x9fa5

81、数组
var arr = [1,2,3];
var arr = new Array(1,2,3);
var arr = new Array(3); //表示长度是3,并不是只有一个元素是3
var arr = [3]; //表示只有一个元素是3

#函数:
arr.push(元素); //加到后面
arr.unshift(元素); //加到前面
arr.pop(); //删除后面
arr.shift(); //删除前面

#arr.splice(开始位置,删除几个[,元素1,元素2...]);// 万能方法,灵活使用,
#可实现各操作
删除:var arr = [2,3,8,9,10,22];
      arr.splice(2,1); //从第2个位置开始,删除1个
增加:arr.splice(3,0,100); //2,3,8,100,9,10,22
      arr.splice(3,0,100,200); //2,3,8,100,200,9,10,22
替换:arr.splice(3,2,55,66); // 2,3,8,55,66,22

#模拟:
增加:push---arr.splice(arr.length,0,数1);
      unshift---arr.splice(0,0,数1,数2);
删除:pop---arr.splice(arr.length-1,1);
      shift---arr.splice(0,1);

#arr.join(连接方式); //数组转字符串
#arr.concat(数组1,数组2...); //数组连接
#arr.reverse(); //数组反转
#arr.sort(); //排序 默认字典序

#排序数字时需要自己实现:
arr.sort(function(n1,n2){
return n1-n2;
});

数组长度: arr.length --还能赋值

#清空数组:
1) arr.length = 0;
2) arr = [];
3) arr.splice(0,arr1.length);
4)while(arr1.length){arr1.pop()}
82、JSON:
json是什么?
给变量打个包,存储多个东西
json={name: value, name2: value2, name3: value3,......};

json 数组
下标 字符串 数字
length undefined 有length

for for in循环 普通for循环
有序 无序 有序

#83、 json添加一项:
json.x=xx;
json删除一项:
delete json.x
#84、另一种循环:for in循环:循环json对象
<script>
    var json = {a:1,c:100,d:'100px',ff:[1,3,9,20]};

    //alert(json.ff);
    /*for(var i = 0;i < json.ff.length; i++){
        alert(json.ff[i]);
    }
    */
    for(var name in json){
        if (name == 'ff'){
            for(var i = 0;i < json[name].length; i++){
                alert(json[name][i]);
            }
        }   
     }

</script>

普通循环:for while
* 能用for循环尽量用for循环,实在没办法采用for in

#85、 json的写法:
a). json={a:1};
b). json={"a":1}; √
c). json={'a':"张三"}; √
#86、题
json = {a:1,b:2};
json['a']++;
console.log(json); //{a:2,b:2}
#87、json中什么都可以存,比如,描述 小明 的特点及亲戚
#88、用json的方法完善 setStyle:
function setStyle(){
var obj = arguments[0];
if (arguments.length == 3){...
else if(arguments.length == 2){...
#89、getByClass(完美版)
document.getElementsByClassName(类名); --兼容高级浏览器
oParent.getElementsByTagName('*');--获取oParent下的所有标签
完美版:
function getByClass(oParent,sClass){
if(oParent.getElementsByClassName){

return oParent.getElementsByClassName(sClass);
}else{

var aEle=oParent.getElementsByTagName('*');

// 用来装满足条件的元素

var arr=[];
for(var i=0; i<aEle.length; i++){
    var aClass=aEle[i].className.split(' ');
    if(findInArr(aClass, sClass)){
        arr.push(aEle[i]);
    }
  }
return arr;
}

90、select的使用

onchange --变化时的事件
oSle.value --获取选中项的值
<option selected... --默认选中项设置属性

当前选中的索引值:
oS.selectedIndex
获取所有option:
aO = oS.getElementsByTagName('option');
oS.options;

选中项的文本:
a). aO[oS.selectedIndex].innerHTML
b). aO[oS.selectedIndex].text

动态添加一个option:
创建:new Option(文本, value);
添加:oS.options.add(option);
删除:oS.options.remove(索引);
91、Math:
Math.random(); 随机数

Math.abs(); 绝对值
Math.max(); 最大值
Math.min(); 最小子值
Math.pow(n,m); n的m次方
Math.sqrt(); 开平方

Math.ceil(); 向上取整
Math.floor(); 向下取整
Math.round(); 四舍五入

92、eval深入: eval(json)的时候出问题了 eval('('+json+')');

93、删除数组中的偶数
<script>
    var arr = [1,2,2,3,1,1,1,1,8,8,9,100,23,45];
    for(var i = 0; i < arr.length; i++){
        if(arr[i] % 2 == 0){
            //偶数
            arr.splice(i,1);
            i--;
        }
    }
    alert(arr);
</script>

94、统计字符串中出现次数最多的字母
<script>
    var str = 'aabbcdefggggggggggggggggggggggggggssssssssssssssssssssss';
    var json = {};
    /*
        json = {};
        a   json['a'] = 1;
        a   json['a']++;  json['a']=2
        b   json['b'] =1;
        json -- {'a':1,'b':2,s:100}
     */
    for(var i = 0 ;i < str.length; i++){
        /*alert(str.charAt(i));*/
        if(json[str.charAt(i)]){
            json[str.charAt(i)]++;
        }else{
            json[str.charAt(i)] = 1;
        }
    }
    //console.log(json);
    var aaa = '';
    var iCount = 0;
    for(var name in json){
        //name a b ...  s
        //json[name]  2  2  1 1 ....21  22
        if (json[name] > iCount){
            aaa = name;
            iCount = json[name];
        }
    }
    document.write('出现最多次数的字母是:'+aaa+',出现了'+iCount+'次');

</script>

95、复选框联动全选
<script>
    window.onload = function(){
        var oChkAll = document.getElementById('ckbAll');
        var oDiv2 = document.getElementById('div2');
        var aChk = oDiv2.getElementsByTagName('input');

        var iCount = 0; //当前选中了几个
        //全选,点上面
        oChkAll.onclick = function(){
            if (oChkAll.checked == true){
                for(var i = 0;i < aChk.length;i++){
                    aChk[i].checked = true;
                }
                iCount = aChk.length;
            }else{
                for(var i = 0;i < aChk.length;i++){
                    aChk[i].checked = false;
                }
                iCount = 0;
            }
            document.title = iCount;
        };
        //下面
        for(var i = 0;i<aChk.length;i++){
            aChk[i].onclick = function(){
                if(this.checked == true){
                    iCount++;
                }
                else{
                    iCount--;
                }
                if (iCount >= aChk.length){
                    oChkAll.checked = true;
                }else{
                    oChkAll.checked = false;
                }
                document.title = iCount;
            };
        }
    };
</script>

<body>
<div id="div1">
    <input type="checkbox" name="" id="ckbAll">
</div>
<hr>
<div id="div2">
    <input type="checkbox" name="" id=""><br>
    <input type="checkbox" name="" id=""><br>
    <input type="checkbox" name="" id=""><br>
    <input type="checkbox" name="" id=""><br>
    <input type="checkbox" name="" id=""><br>
    <input type="checkbox" name="" id=""><br>
</div>
</body>
96、数组去重三种办法:
1)用findInArray,把结果放到新数组
<script>
    function findInArray(arr,n){
        for(var i = 0; i < arr.length; i++){
            if (n == arr[i])
            {
                return true;
            }
        }
        return false;
    }

    var arr = [1,2,2,3,1,1,1,1,8,8,9,100,23,45];
    var arr2 = [];
    for(var i = 0; i < arr.length; i++){
        if (!findInArray(arr2,arr[i])){
            arr2.push(arr[i]);
        }
    }
    alert(arr2);
</script>

#2)和下一项比,如果重复就splice删除,i--
<script>
    //去重方法2
    function findInArray(arr,n){
        for(var i = 0; i < arr.length; i++){
            if (n == arr[i])
            {
                return true;
            }
        }
        return false;
    }

    var arr = [1,2,2,3,1,1,1,1,8,8,9,100,23,45];
    for(var i = 0; i < arr.length; i++){
        if (findInArray(arr,arr[i])){
            console.log(i + '-----' + arr);
            arr.splice(i,1);
            i--;
        }
    }
    alert(arr);
</script>

3)利用json的name不重复的特性
<script>
    //去重方法3
    var arr = [1,2,2,3,1,1,1,1,8,8,9,100,23,45];
    var json = {}; //{'1':sss,'2':ssfd,'3':sss,'8':fdfd}

    for(var i = 0; i< arr.length; i++){
        if(!json[arr[i]]){
            json[arr[i]] = 'zns';
        }
    }
    //console.log(json);
    var arr2 =[];
    for(var name in json){
        //name 1  2 3 8..
        //json[name]  zns
        arr2.push(name);

    }
    alert(arr2);
</script>

97、自己实现排序 (选择排序)

98、JS特性-预解析
JS特性-预解析:预先解析一些东西|--变量定义、函数定义 会预解析

先alert再var->-uncefined而不是报错

预解析的作用范围:会找本作用域之之内, --函数,script

题1:
var a = 12;
if (a%2){
  function show(){alert('奇数');}
}else{
  function show(){alert('偶数');}
}

show();

题2:
function show(){
  alert(a);
  return;
  var a = 123;
}
show();
#99、引用
和对象打交道的 : oDate,oDiv,json,arr...
对象之间有才是引用的
指的是同一个东西(多人一个柜子)
基本类型不是引用

#100、字符编码
str.charAt(1);
str.charCodeAt(索引); -> 字母对应的编码
汉字在计算机中都有编码,范围是 0x4e00-0x9fa5
已知编码,变成对应的字-- String.fromCharCode('0x4e00');
统一编码:unicode包含 utf-8/16 和 gb2312
表示方法: \u
比如: 一 \u4e00

#101、in:
var json = {a:1,b:2};
alert(json.a); //是对的,说明 a 在json里面
全局的东西,默认都在window里

#102、异常
异常捕获:try{} cache(e){}

#103、定义变量,但是没有使用var,就变成全局的了
var a= b=c=d=1; //连等导致b c d 全局

#104、逗号表达式 逗号运算符,只看最右面,优先级最低 
题1:
if(1,0,true,undefined){alert(1);}
else{alert(2);}
题2:
for(var i =0,j=0,k=1;i<10,j<5,k<3;i++,j++,k++){}
alert(i+j+k);

#105、赋值表达式,值是赋值后的结果
106、严格模式 'use strict'
a、定义变量必须加 var
b、不允许在(if,for)等语句里定义函数了
c、干掉了 with

严格模式的作用范围:
1、冲不出script标签
2、可以作用到函数内部(写到函数里)
3、放到整个js文件,开头

建议:以后大家每个js文件的开头,都要加上 'use strict'
预解析跟严格模式没有关系,严格模式并没有把预解析干掉
107、JS组成部分:
ECMA: ECMAScript,解释器,解析语法、词法
var, if(){} , while(){}
arr.push arr.reverse()....第一部分学的知识
兼容性:完全兼容 现在所学的是稳定版本4,

DOM
Document Object Model 文档对象模型
就是跟页面打交道
比如,获取元素,设置样式。。。。等和页面有关的
兼容性: 一般还行吧。 大部分都兼容,少部分不太兼容,也可以去处理
document.getElementsByClassName();

BOM
Browser Object Model 浏览器对象模型
就是跟浏览器打交道
navigator.userAgent
alert();//在不同的浏览器下长得不一样,但没办法改
兼容性:大部分都不兼容,不兼容的地方没办法处理
108、DOM
#1)子级:一级(一层) 父级.children
children不包含文本节点

#2)父级: obj.parentNode

#3)兄弟元素
下一个兄弟: var oNext=obj.nextElementSibling || obj.nextSibling;
obj.nextElementSibling || obj.nextSibling 不能换位置
上一个兄弟:var oPrev=obj.previousElementSibling || obj.previousSibling;
首节点: var firstLi=obj.firstElementChild || obj.firstChild; 或 父级.children[0]
尾节点: var lastLi=obj.lastElementChild || obj.lastChild; 或 父级.children[父级.children.length-1]

#109、创建元素: var obj=document.createElement('标签名');

#110、添加元素:父级.appendChild(obj); //剪切
插入到父级的最后
父级.insertBefore(obj, 谁之前); //剪切

#111、删除元素:
父级.removeChild(obj);
112、简易留言板:添加留言,隐藏,删除,每次往前面加
<style>
    div{
        width: 100%;
        height: 30px;
        background: red;
        margin: 5px;
        float:left;

    }
</style>
<script>
    window.onload = function(){
        var oBtn = document.getElementById('btn1');
        var oUL = document.getElementById('ul1');
        var oT = document.getElementById('txt1');

        oBtn.onclick = function(){
            //创建li,并加到ul里
            var oLI = document.createElement('li');
            oLI.innerHTML = oT.value + '<a href="javascript:;">删除</a>';
            //oUL.appendChild(oLI);
            var oFirst = oUL.firstElementChild || oUL.firstChild;
            oUL.insertBefore(oLI,oFirst);
            //实现隐藏功能
            var oLink = oLI.children[0];
            oLink.onclick = function(){
                //this.parentNode.style.display = 'none';
                oUL.removeChild(oLI);
            };
            //清空文本框
            oT.value = '';
        };
    };
</script>
</head>
<body>
留言内容:<input type="text" id="txt1">
<input type="button" value="留言" id="btn1">
<ul id="ul1">

</ul>
</body>
114、BOM
window.open(地址, 方式);
方式:默认是新页面打开
_blank:新页面打开
_self:当前页面打开
* 只要是用户打开的(触发事件),都不拦截
window.open(); 有返回值->新页面的window对象

115、window.close();
* 可以关闭自己open出来的页面

116、类似于在线运行代码:
var win=window.open(); 返回值 -> 新页面的window对象
win.document.write(oT.value);

117、地址栏信息:
window.location:可以读取,可以赋值
window.location.href:地址
window.location.search:数据
window.location.hash:锚
其他信息:
window.location.protocol:协议
window.location.host:地址
window.location.hostname:域名
window.location.port:端口号
window.location.pathname:路径

118、历史记录:
window.history
window.history.forward(); 前进
window.history.back(); 后退
window.history.go(数字);
window.history.go(-1); 后退
windiw.history.go(1); 前进
119、右下角悬浮框
滚动条滚动纵向的距离:var scrollTop=document.documentElement.scrollTop || document.body.scrollTop;
滚动条滚动的横向距离:var scrollLeft=document.documentElement.scrllLeft || document.body.scrllLeft;
几个事件:
window.onload:当页面加载完成
 window.onscroll:当滚动条滚动的时候
 window.onresize:当页面缩放的时候
可视区宽度:document.documentElement.clientWidth;
可视区高度: document.documentElement.clientHeight;
物体宽度:obj.offsetWidth
物体高度:obj.offsetHeight