• javascript (字符串, 数组, 对象 , 日期 和 操作元素节点 动画 定时器)


    判断是否为数组 

    变量 instanceof (Array, object, number )  判断是否是数组、数字,obj
    includes() 方法用来判断字符串是否包含指定的 子字符串
      如果找到匹配的字符串则返回true 否则返回false
      includes方法区分大小写
    用法: 
    str.includes('查询的字符串') // 成功放回true
     变量.constructor  === Array / Number / object 判断是有是 数组 / 数字 / 对象
     
     
    // 字符串新方法 string.prototype.padStart(填充完毕之后的总长度,'以什么字符串进行填充') // 从前面添加
    // 字符串新方法 string.prototype.padEnd(填充完毕之后的总长度,'以什么字符串进行填充') // 从后面添加
     
     
    换行符  空格 回车 && 与 || 或 ! 非(取反)
    search(regexp) 模糊查询   regexp(正则表达式)   返回所在位置(索引) 如果没有则返回 -1
    
    
    classList属性
    classList 属性返回元素的类名,作为 DOMTokenList 对象。
    该属性用于在元素中添加,移除及切换 CSS 类。
    classList 属性是只读的,但你可以使用 add() 和 remove() 方法修改它。
    语法:element.classList
    属性 :element.classList.lenght (返回类列表中类的数量 该属性是只读的)
    方法:
    element.classList.lenght.add( String [, String] )添加指定的类值。如果这些类已经存在于元素的属性中,那么它们将被忽略。
    element.classList.lenght.remove( String [,String] )删除指定的类值。item ( Number )按集合中的索引返回类值。
    element.classList.lenght.toggle ( String [, force] )当只有一个参数时:切换 class value; 即如果类存在,则删除它并返回false,如果不存在,则添加它并返回true。当存在第二个参数时:如果第二个参数的计算结果为true,则添加指定的类值,如果计算结果为false,则删除它
    element.classList.lenght.contains( String )检查元素的类属性中是否存在指定的类值。
    element.classList.lenght.replace( oldClass, newClass )用一个新类替换已有类。
    element.classList.lenght.item(index) 返回元素中索引值对应的类名。索引值从 0 开始。如果索引值在区间范围外则返回 null
     
    简单数据类型:数字Number 字符串 string 布尔值booleBoolean 未定义undefined   空 Null
    复杂数据类型: 数组Array  函数function 对象 Object
     
     
    alert() 用浏览器提示框显示 信息 (消息弹出框)
    prompt( ) 用浏览器对话框,接收用户输入的 提示信息 (信息输入框)
    console.log() 用浏览器控制台显示信息
    isNaN()方法 判断一个变量是否为 非数值 是数值返回false 不是返回true
    (typeof 变量) 可以用来获取变量的数据类型(返回的数据类型有 string(字符串) number(数字) function(函数) Boolean(布尔值) object(对象) undefined(空))
    parseInt(); 数字转整数
    parseFloat()数字 浮点小数
    变量.toFixed( 要保留几位 )四舍五入为指定小数保留个数(添加几保留几位)
     
     
    对象
    对象是一个容器. 封装了 属性 和 方法
    属性: 对象的静态特征
    方法: 对象的动态特征, 一般指的是对象的有个功能(用匿名函数表示)或者行为
    创建方式
    通过new关键字调用系统提供的 构造函数 Object
    var 变量名 = new Object()
    通过字面量的方式
    var 变量名 = {} 
     
    indexOf() 可以返回某个字符串的值在字符串首次出现的位置
    delete 对象.键名   删除对象的属性和方法
    delete 对象['键名'] 删除对象的属性和方法
    对象.length 获取对象的长度
     
    for in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。
    for(var key in 对象){
    //key 是对象中的每一个键
    //对象[key];
    }
    对象.hasOwnProperty('键') 检查一个对象中是否存在某个属性或方法、返回布尔值
    对象 instanceOf 构造函数名 | 监测对象类型 检测一个对象的数据类型
     
    Math 对象
    Math本身就是一个对象, 不需要在通过构造函数去创建, 该对象中集合了很多关于数学运算的方法
    Math.abs() 获取一个对象的绝对值
    Math.round() 四舍五入
    Math.PI   π的值
    Math.ceil() 向上取整
    Math.floor() 向下取整
    Math.random() 随机数 (随机生成0 ~1之间的数)
    Math.max() 求几个数的最大数
    Math.min() 求几个数的最小数
     
    switch( 结果表达式 ){  // 多条件查询 ( 等值判断使用 )
    case value1 : //表达式结果 等于 value1 时 要执行的代码
    break;
    case value2 : //表达式结果 等于 value2 时 要执行的代码
    break;
    ..............(可多个)
    default: //表达式结果 不等于任何一个 value 时 要执行的代码
    }
    while 语句就是当条件满足时重复执行相同的代码;
    do..while 最少会执行一次循环的代码。
    continue 立即跳出本次循环,继续下一次循环
    break 退出整个循环 开始执行 循环后面的代码
    return 关键字 可以终止函数的执行 可以 将数据返回给调用者,调用者 可以用变量接收函数返回的结果
     
    函数:
    函数就是一个功能,封装的一段代码,该功能可以反复调用
    函数的作用: 可以反复调用 减少代码的冗余
    函数创建
      关键字 function
      语法: 
    function 函数名(){
      // 函数体  
    }
    // 调用
    函数名()
    注意:函数创建好了,函数体中的代码不会执行,只有调用时,函数体内的代码才会执行
    函数的参数分为: 形参 实参
    形参: 函数定义时, 小括号的标识符,标识符相当于函数体内的变量,命名规则和变量一样
    实参: 函数调用时,传入的实际的数据
     
    预解析:
     程序准备→执行.程序在执行之前,有个预备过程,预备过程要做的是就是预解析.预备过程要做两件事, 分别是:1. 把用var const set关键字所声明的变量名(仅仅是变量名成),提升到当前执行环境(作用域)的顶部    2. 把用函数声明所创建的函数(函数整体), 提升到当前环境(作用域)的顶部  3. 函数表达式如果提前调用会报错, 函数声明不会报错
     
     
    函数声明:
     function 函数名(){// 函数体}
    函数表达式:
    var 变量名 = function(){// 函数体}
     函数也是一种数据类型, 属于引用数据类型[function]
    匿名函数就是 没有名字的函数,在JS中匿名函数需要配合运算符使用
      自调用函数 自执行函数就是匿名函数 创建后马上调用执行
    自调用函数的优点是 可以避免全局变量污染 
     
    函数体内的arguments
    arguments函数体内提供的一个伪数组,arguments中存放了所有的实参
    应用场景 在用户输入实参的个数不确定的情况下使用
    arguments的使用
    function 函数名(){
      arguments.length // 参数的个数
      arguments[索引]  // 获取一个实参    
    }
    // 实现计算用户输入任意个数字的总和
    function fn(){
    var sum = 0;
     for(var i = 0; i < arguments.lenth; i++){
       sum = sum + arguments[i]
     }
     return sum
    }
    var num = fn(1,2,3,4,5,6,7,8,9,44) // 89
     
    数组(Array)
    创建数组 : var arr = new Array( ) 通过构造函数创造数组
    var arr = [ ] 通过字面量创造数组
    变量课访问的范围 是作用域
    全局作用域 是函数之外的执行环境(程序的任何地方都可以使用)
    局部作用域 只能在本函数中使用
    数组名.unshift(要添加的项,多个) 在数组开始位置添加
    数组名.push(添加的项,可多个) 在数组结束位置添加(常用)
    数组名.shift() 删除并返回数组的第一个元素, 删除第一个
    数组名.pop() 删除并返回数组的最后一个元素, 删除最后一个
    数组名.splice(索引,删除的个数,替换项) 从数组中添加、删除任意位置
    数组.splice(index,howmany,item)
    参数:  index 从哪个位置开始删,
        howmany 删除几个 
        item新添加的数据(可以是多个) 可选值
     var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
        // 删除
        var arr1 = arr.splice(2, 2)  // 可以返回一个的新数组
        console.log(arr1); // [3, 4]  截取的结果
        console.log(arr); //  [1, 2, 5, 6, 7, 8, 9]
      // 如果截取的个数是 0 意思就是 从这个位置添加
    var arr2 = arr.splice(2, 0, 'a', 'b') console.log(arr2); // [] 没有删除 console.log(arr); // [1, 2, "a", "b", 5, 6, 7, 8, 9]

     
    数组名.indexOf('要查询的东西') 从前向后查询|不存在返回-1
    数组名.lastIndexOf('要查询的东西') 从后向前查询|不存在放回-1
    数组名.reverse()  颠倒数组中元素顺序
    sort也可以排列字符串的顺序
     var arr = ['v','s','d','f','h','r','t','u','z','a','e','i','o','p','k']
       arr.sort()
       console.log(arr); // ["a", "d", "e", "f", "h", "i", "k", "o", "p", "r", "s", "t", "u", "v", "z"]
    // 注意 如果要排列数字的会 最好不要直接使用 sort 以为他值可以 排列单数 如下
      var arr = [1,2,8,9,6,44,66,22,12]
      arr.sort()
      console.log(arr); // [1, 12, 2, 22, 44, 6, 66, 8, 9]
    // 如果要排列数字的话 最好用下边的俩个方法 
    数组.sort(function(a,b){return a-b}) 从小到大
    或者
    数组.sort(function(a,b){return b-a}) 从大到小
    数组名.sort(function(a,b){return a-b}); 从小到大排列
    数组名.sort(function(a,b){return b-a}); 从大到小排列
     
    数组名.slice(索引,个数)截取 ①索引 ② 截取的个数   [返回一个新数组]
    数组名.join('')数组拼接 ('')添字符 (把数组转换成字符串)[用于把数组中的所有元素放入一个字符串]
    var arr = ["hhhui", "gggg", "g", "ggg", "ddd", "ggg", "xxx", "nnn", "sss", "aaa"]
    var str = arr.join(arr)
    console.log(str) // 'hhhui-gggg-g-ggg-ddd-ggg-xxx-nnn-sss-aaa'
     数组的合并 concat
     var arr = [1,2,3,4,5]
       var arr1 = ['a','b','c']
       console.log(arr.concat(arr1)); //  [1, 2, 3, 4, 5, "a", "b", "c"]
     
     
     
    数组名.forEach(function(value,index,currentArray){}) (与for用法基本一样)
    参数: value: 这个数组的每个内容  index 索引  currentArray 这个数组
    数组名.filter(function(value,index,currentArray){ return 条件})  过滤出符合条件的元素,返回一个新数组
    var num = [11, 22, 33, 44, 33, 66, 88, 77, 99, 2, 3, 1, 5, 4, 6, 7, 0, 9, 8]
    var nums = num.filter(function(v,i,a){
    return v > 11 })
    console.log(nums); 结果:  [22, 33, 44, 33, 66, 88, 77, 99]
    //
    currentValue  必须。当前元素的值

    // index 可选。当前元素的索引值
    // currentArray 可选。当前元素属于的数组对象
    数组名.every(function(value,index,currentArray){return 条件}) 验证数组中的每个元素是否都符合指定条件,返回布尔值
         every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
              every() 方法使用指定函数检测数组中的所有元素:
              如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
              如果所有元素都满足条件,则返回 true。
              注意: every() 不会对空数组进行检测。
              注意: every() 不会改变原始数组。
    语法:
      array.every(function (currentValue, index, arr), thisValue) 
    参数: 
      varlue: 当前元素的值
      index: 当前元素的索引
      arr: 当前元素属于的数组对象
    thisValue: 可选, 对象作为该执行回调时使用,传递给函数, 作用"this"的值, 如果省略了thisValue, 'this'的值为'undefined'
     
     
    数组名.some(function(value,index,currentArray){return 条件}) 验证数组中的每个元素是否都符合指定条件,返回布尔值 
         some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。
              some() 方法会依次执行数组的每个元素:
              如果有一个元素满足条件,则表达式返回true, 剩余的元素不会再执行检测。
              如果没有满足条件的元素,则返回false。
              注意: some() 不会对空数组进行检测。
              注意: some() 不会改变原始数组。 
    语法:
    array.some(function(currentValue,index,arr),thisValue)
    参数: 
      value: 当前元素的值
      index: 当前元素的索引值
      arr: 当前元素属于的数组对象
    thisValue: 可选, 对象作为该执行回调时使用,传递给函数, 作用"this"的值, 如果省略了thisValue, 'this'的值为'undefined'
     
     
    数组.map(function(value,index,currentArray){return 操作}) 遍历数组中每一个元素,更改后存入一个新的数组中 返回新数组
              定义和用法
              map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
              map() 方法按照原始数组元素顺序依次处理元素。
              注意: map() 不会对空数组进行检测。
              注意: map() 不会改变原始数组。
    语法:
    array.map(function (currentValue, index, arr), thisValue)
     参数:  
      value: 当前元素的值
      index: 当前元素的索引值
      arr: 当前元素属于的数组对象
    thisValue: 可选, 对象作为该执行回调时使用,传递给函数, 作用"this"的值, 如果省略了thisValue, 'this'的值为'undefined'
     
     
    数组名=[] 清空数组
    数组名.length = 0; 清空数组
    数组名[数组.length-1] = '数据'  向数组最后追加新元素
     
    string字符串对象
    字符串所有的方法,都 不会修改字符串本身(字符串是不可变的),操作完成会 返回一个新的字符串
     
    字符串.charAt(数字) 那个字符在这个位置(索引值)
    var str = 'nihaome wozhendexiangxeuhaoqianduan'
    var str2 = str.charAt(4);//字符串的下标是从1开始的,所以返回o
    var str3 = str.charAt(25); //25位置是a;
    var str4 = str.charAt(5,26); //传入两个参数,不会报错,但是第二个参数默认无效,
    //所以返回的是位置5的字符m
    console.log(str2); // 结果 o
    console.log(str3); // 结果 a
    console.log(str4); // 结果 m
     
    字符串.charCodeAt()  返回字符串中index位置的字符编码。
    var str = "llinihao mezaigama";
    var str2 = str.charCodeAt(5);//位置5的字符是h,h的Unicode编码是104
    var str3 = str.charCodeAt(3);
    console.log(str3); //110
    console.log(str2); // 104
    字符串[索引] 获取字符串中的单个字符
    拼接字符串记得用 + 拼接符
    字符串.concat(要拼接的字符串)
    var str1 = "lixiaoqi";
    var str2 = 'zaijian';
     // 把str1连接到str2上
    console.log(str2.concat(str1)); // 结果 zaijianlixiaoqi
    字符串slice(开始位置,结束位置) 截取
     
    字符串.substr() 
    字符串.substr(start,len)
    功能: 截取字符串
    参数: 
      start :(必需)指定字符串的开始位置;
      len:(可选)表示截取的字符总数,省略时截取至字符串的末尾。
      当start为负数时,会将传入的负值与字符串的长度相加。
      当len为负数时返回空字符串。
    字符串.substring()  语法及功能同slice()完全一样,区别只在于遇到负数时,自动将参数转换为0。
              substring()会把较小的数作为开始位置,较大的数作为结束位置。
     
    查询字符是否在字符串中
    字符串.indexOf('要查询的字符') 返回所在位置 从前向后查询
    字符串.lastIndexOf('要查询的内容') 返回所在位置 从后向前查询
    字符串.trim() 去掉字符串前后的空格
    字符串.toUpperCase() 字符串转成大写
    字符串.toLowerCase() 字符串转成小写
    字符串.replace(①,②) 字符串替换 ①原来的②要替换的
    字符串.split('要拿出的相同字符')字符串分割 把字符串分割成数组
    var str = 'hhhui-gggg-g-ggg-ddd-ggg-xxx-nnn-sss-aaa'
     var arr = str.split('-')
     console.log(arr) // ["hhhui", "gggg", "g", "ggg", "ddd", "ggg", "xxx", "nnn", "sss", "aaa"]
     
     
     
    时间 Date
    var 变量 = new Date() 获取当前时间
    24小时制
    获取(get)
    日期对象.getFullYear() 年
    日期对象.getMonth() 月 // 注意:获取月份是从0开始的
    日期对象.getDate() 日
    日期对象.getHours() 时
    日期对象.getMinutes() 分
    日期对象.getSeconds() 秒
    对象.getMilliseconds() 毫秒
    对象.getDay(); 0-6(星期日到星期六)
    对象.getTime();
    设置(set)
    日期对象.setFullYear(数字)
    日期对象.setMonth(数字)
    注意:获取月份是从0开始的
    日期对象.setDate(数字)
    日期对象.setHours(数字)时
    日期对象.setMinutes(数字) 分
    日期对象.getSeconds() 秒
    对象.setMilliseconds(数字)毫秒
    对象.setTime(数字);
     
    12小时制的样式
    时间对象.toLocaleString() // 获取当前 时间 例如样式: 2018/5/14 上午11:12:22
    时间对象.toLocaleDateString() // 获取当前 年/月/日
    时间对象.toLocaleTimeString() // 获取当前 时:分:秒 12小时值得 例如样式:上午 11:22:22
    【var dt = new Date();
    const 变量名 = (dt.getMonth()+' ').padStart(2,'0') 这样自动会把时间前面的0补齐
    padStart( ) :第一个参数表示: 长度 第二个参数表示: 前面要用什么补齐
    padEnd( ) :第一个参数表示:长度 读儿歌参数 表示: 向后要用什么补齐 】
    // 字符串新方法 string.prototype.padStart(填充完毕之后的总长度,以什么字符串进行填充) // 从前面添加
    // 字符串新方法 string.prototype.padEnd(填充完毕之后的总长度,以什么字符串进行填充) // 从后面添加
    方法描述
    Date() 返回当日的日期和时间。
    getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
    getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。
    getMonth() 从 Date 对象返回月份 (0 ~ 11)。
    getFullYear() 从 Date 对象以四位数字返回年份。
    getYear() 请使用 getFullYear() 方法代替。
    getHours() 返回 Date 对象的小时 (0 ~ 23)。
    getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。
    getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
    getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。
    getTime() 返回 1970 年 1 月 1 日至今的毫秒数。
    getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。
    getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。
    getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。
    getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。
    getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。
    getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。
    getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。
    getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。
    getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。
    parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。
    setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。
    setMonth() 设置 Date 对象中月份 (0 ~ 11)。
    setFullYear() 设置 Date 对象中的年份(四位数字)。
    setYear() 请使用 setFullYear() 方法代替。
    setHours() 设置 Date 对象中的小时 (0 ~ 23)。
    setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。
    setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。
    setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。
    setTime() 以毫秒设置 Date 对象。
    setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。
    setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。
    setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。
    setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。
    setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。
    setUTCSeconds() 根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。
    setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。
    toSource() 返回该对象的源代码。
    toString() 把 Date 对象转换为字符串。
    toTimeString() 把 Date 对象的时间部分转换为字符串。
    toDateString() 把 Date 对象的日期部分转换为字符串。
    toGMTString() 请使用 toUTCString() 方法代替。
    toUTCString() 根据世界时,把 Date 对象转换为字符串。
    toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。
    toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。
    toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。
    UTC() 根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。
    valueOf() 返回 Date 对象的原始值。
     
     
     
    数据结构栈 和 队列
    栈: 先进后出
    队列: 先进先出
     
     
    文档树:
    DOM文档对象模型, 又称文档树模型.浏览器在加载时,会把HTML文档解析成一系列的节点对象,在有这些节点对象组成树状结构,这些节点对象对外提供 属性和方法.我们可以通过调用节点对象的属性和方法来操作网页
    注意: 树桩上的每个分支都是对象,也可以叫做 节点对象
    节点对象: 元素(标签) 属性(标签的属性) 文本(内容)
     
    WebAPI获取元素节点的方法
    document.getElementById() 获取标签在的ID
    document.getElementsByTayName() 获取标签名
    document.getElementdByClassName()获取标签类名
    document.getElementsByName() 根据标签的属性值获取一组节点对象。返回一个伪数组
    document.querySelector()[0] 根据选择器获取【单个节点对象】。返回一个节点对象(ID记得加 # 类名加 .)
    document.querySelectorAll() 根据标签的name值获取【一组节点对象】。返回一个伪数组
     
     
     
    元素的属性分类:
    表单属性: value checked
    非标点属性: id class title href src className innerHTML innerText
     
    操作元素
    元素.innerHTML = '可以填写内容和标签';
    元素.className = 类名; 添加或删除类名
    元素.innerText='只可以填写内容'; 添加标签会被一起打印到页面
    元素.textContent = '只可以填写内容'; 添加标签会被一起打印到页面
    innerText和textContent
    谷歌两个都支持
    新版的火狐也是两个都支持  旧版的火狐只支持 textContent
    新版的IE 俩个都支持  旧版的IE 只支持innerText
     
     
     
    操作表单属性
    元素.value 获取文本框的内容(所有表单都可以用)
    元素.value =' '  设置文本框的内容 
    元素.cheked 操作表单元素 是否选中【针对 单选框 和 多选框 选择=true】
    元素.disabled 操作表单元素是否禁止(针对按钮 禁用=true)
    元素.selected 操作下拉框选项是否选中【针对下拉框】
    元素.readOnly 操作表单元素是否只读【针对文本框】
     
    什么是自定义属性
    针对html标签的属性可以分为两类:
    标签自带属性(语言设计者提供的属性)id、title、src、href、name、type等
    自定义标签属性用户根据需求,自己给标签添加的自己定义的标签属性
    操作方式
    获取节点对象.getAttribute('属性名'); // 会返回标签的属性的值
    设置节点对象.setAttribute('属性名','值'); // 会修改或添加标签属性
    删除节点对象.removeAttribute('属性名'); // 会删除标签的属性
    注意:自定义标签属性的操作只能够通过元素的getAtrribute、setAttribute、removeAttribute提供的方法操作。 不能直接通过元素点的方式直接获取或设置
     
     
     
    操作元素的样式 【重要】(只可以获取行内样式 不能获取外联样式)
    通过元素的style属性操作
    var box = document.getElementById('box');
    box.style.width = '100px'; // 设置元素的宽度
    box.style.height = '100px'; // 设置元素的高度
    box.style.backgroundColor = 'red'; // 设置元素的颜色 // css→ background-color js→ backgroundColor
    注意:通过样式属性设置宽高、位置的属性类型是字符串,需要加上px。
    通过设置元素的className属性操作
    var box = document.getElementById('box');box.className = 'aa bb'; // 设置box.className.replace('aa','AA'); // 替换
    小结:元素的style属性适合操作单个样式,而元素className适合操作一组样式
    getComputedStyle(元素).样式 (IE8 一下不支持)
    getComputedStyle(元素), 样式
     window.onload =function(){
          var oDiv = document.getElementById("div1")
          console.log(getComputedStyle(oDiv).width);
        }
    元素.currentStyle.样式     [只支持IE]
     
     
    根据节点之间关系获取节点
     元素节点.offsetParent 返回最近的 定位父元素
    获取父节点
    元素节点.parentNode作用:获取一个节点的父节点
    获取子节点
    节点.childNodes 获取一个节点的所有子节点(包括文本节点和元素节点),返回一个有序的集合  [在 IE7 一下不会获取文本节点]
    节点.children 获取一个节点的所有子节点(仅仅是元素节点)
    获取第一个节点
    父节点.firstChild 获取第一个子节点对象,包含空白(空格)文本节点对象
    父节点.firstElementChild 获取第一个元素子节点对象 有兼容问题(IE9以下)
    获取最后一个子节点
    父节点.lastChild 获取最后一个子节点对象,包含空白文本(空格)节点对象
    父节点.lastElementChild 获取最后一个元素子节点对象,有兼容问题IE9以下
    获取上一个兄弟节点
    节点.previousSibling; 获取上一个同级的节点,包含空白文本节点对象
    节点.previousElementSibling; 获取上一个同级的元素节点,有兼容问题IE9以下
    获取下一个
    节点.nextSibling;获取下一个同级的节点,包含空白文本(空格)节点对象
    节点.nextElementSibling; 获取下一个同级的元素节点,有兼容问题IE9以下
     
     
    创建元素
    document.write('内容') 缺点会覆盖整个页面 一般不用
    document.write('<h2>我是标题</h2>');
    元素.innerHTML ='内容'优点:对于添加多个嵌套的内容操作方便。缺点:会覆盖部分网页元素以及事件
    <ul id="list"></ul>
    // 获取ul
    var ul = document.getElementById('list');
    // 给ul中添加也新的li元素
    ul.innerHTML = ul.innerHTML  + '<li><a href="#">我是新的li</a></li>';
     
    document.createElement('标签名') 优点:不会覆盖原有的元素的事件。缺点:对于添加嵌套多的内容操作麻烦。(只是标签名字不用加<> 如加 <div>标签 直接写成document.createElement(‘div’) 就可以 )
    // 创建一个新的li元素节点
    var li = document.createElement('li');
    // 把新的li追加到ul最后面
    ul.appendChild(li)
    创建元素性能问题 【了解】
    innerHTML 会产生字符串解析,由于字符串的不可变性,尽量避免大量的拼接,否则消耗内存,影响性能。
    document.createElement('标签')创建的性能要比innerHTML要高,但是若涉及到多层嵌套内容时,代码操作麻烦。
    所以,一般情况下,两者配合使用较多
     
    添加元素
    父节点.appendChild(新的子节点);作用:向父节点最后追加新的节点
    父节点.insertBefore(新的节点,旧的子节点) 将一个新的节点插入到父节点中的某个子节点的前面
     
    删除元素
    父节点.removeChild(子节点) 作用:删除父元素中的指定的子节点
     
    替换元素
    父节点.replaceChild(新的节点,旧的子节点) 作用:替换子节点
     
    监听事件
    事件监听可以给元素绑定多个事件处理程序,在实际开发中便于对事件程序的功能进行扩展
     
    事件监听给元素注册事件(动态绑定事件)
    事件目标.addEventListener(事件类型,事件处理程序,是否捕获)
        参数:
            事件类型 字符串  注意:事件名不加on 如 'click'
            事件处理程序  函数
            是否捕获:可选,默认为false,启用了冒泡阶段的处理
    <div id="box">我是div</div>
    <button id="btn">点击改变</button>
    <script>
        // 获取按钮元素节点 和 div元素节点
        var btn = document.getElementById('btn');
        var box = document.getElementById('box');
        // 给按钮注册事件
        btn.addEventListener('click', function () {
            box.style.width = '500px';
        });
        btn.addEventListener('click',function () {
            box.style.height = '500px';
            box.style.backgroundColor = 'blue';
        });
    </script>
    移除元素的指定事件程序
    事件目标.removeEventListener(事件类型,事件处理程序名称);
    参数:
            事件类型 字符串 注意:事件名不加on 如:'click'
            事件处理程序:函数 注意:这里要把函数名传入过来
     
    事件流
    指的是事件的传播过程,传播过程要经理三个阶段(事件捕获,目标元素,事件冒泡)

     

    事件捕获
    虽然没有启用处理冒泡阶段,但是冒泡阶段依然存在。
    事件对象
    事件对象,是一个小的工具库,工具库中存放了和当前事件相关的各种信息和功能
     
    获取事件对象
    事件目标.事件类型 = function(e){
    // 形参e就是当前点击事件的 事件对象
    事件处理程序(函数),函数的第一个形参就是我们将来要使用的【事件对象】
     }
    事件对象的公共属性和方法
    不论是什么类型的事件(比如键盘、鼠标、手指触摸等等),他们的事件对象都有的属性和方法
     
     
    公共属性
    事件对象.type // 获取当前的事件名
    document.onclick = function (e) {
    // 查看当前的事件类型
    console.log(_e.type); // click
    }
     
     
    事件对象.target // 获取事件目标里最先触发事件的元素
        几个target比较常用的属性
        获取文本内容:事件对象.target.textContent
        获取父级节点:事件对象.target.parentNode
        获取节点名称:事件对象.target.nodeName
        获取节点名称: 事件对象.target.tagName
        需要注意,使用target获取到的节点名称全部为大写
    事件对象.preventDefault() //阻止事件默认跳转行为的执行
    事件对象.returnValue = false  // 也可以阻止事件默认跳转行为
    事件对象.stopPropagation() //停止冒泡
     
    鼠标事件对象的属性
     
    事件对象.clientX/Y //鼠标在浏览器可视区域中的坐标
     
    事件对象.offsetX/Y //获取鼠标在指定的元素的区域中的坐标
     
    事件对象.pageX/Y // 获取鼠标在整个文档区域中的坐标
    图解:client/offset/page的x/y的区别
     
     
    键盘事件对象的属性
    事件对象.altKey // 检查是否按下键盘上的Alt键 返回true
    document.onkeydown = function (e) {
    alert(e.altKey); // 按下alt键,返回true
    }
    事件对象.ctrlKey //检查是否按下键盘上的 Ctrl键 返回true
    事件对象.shiftKey // 检查是否按下键盘上的 shift键 返回true
    事件对象.keyCode //返回被敲击的键 生成的 Unicode 字符码(ascii码)
     
     
    事件委托
    事件委托,也叫事件代理。指的是子孙元素的事件绑定,完全交给其上级父元素或祖先元素绑定。
    在web前端开发中,并不是程序注册事件越多越好,事件注册越多,就越消耗程序的性能。所以,在事件注册较多的情况下,为了提高程序的性能,应当适当减少事件的绑定。
    传统的事件处理中,需要为每个元素注册事件。事件委托则是一种简单有效的技巧,通过它可以把时间注册到一个父级元素或父级以上的元素上,从而避免吧事件注册到多个子集元素上
     
    事件委托的原理 事件源→(function(e){e.target})
    事件委托的原理用到的就是 目标元素 和 事件冒泡,把事件注册到父元素或父级以上的元素上,等待 子元素事件冒泡,并且在父元素或父级以上的元素注册的事件中能够 通过事件对象.target判断是哪个子元素,从而做相应处理。​
    ① 给目标元素的父元素或父级以上的元素注册事件
    ② 在父元素或父级以上元素注册的事件中通过 事件对象.target判断是哪个子元素
    ③ 根据判断做出处理。
     
     
    获取元素的大小
    元素.offsetWidth 和 元素.offsetHeight
    获取元素的宽度 和 高度,返回数字,不含单位。
    元素的宽度:width + padding(左右) + border(左右);
    元素的高度: height + padding(上下) + border(上下);
    注意:我们在使用 offset 系列的时候,对于距离上边距和左边距没有什么需要注意的,但是在宽度与高度中,需要考虑 实际高度与宽度,和内边距与边框
    offset 系列的属性是只读;要是改变的话必须有元素.style
     
    获取元素的位置
    元素.offsetLeft 和 元素.offsetTop
    作用:获取元素的坐标,相对于其最近的定位的上级元素的坐标。否则,相对于body。
     
     
    获取元素的父元素
    元素.offsetParent // 获取元素的最近的定位的上级元素
    图解offset系列属性
     
    获取元素的大小
    元素.clientWidth和 元素.clientHeight
    获取元素的宽度 和 高度,返回数字,不含单位。
    元素的宽度:width + padding(左右) ;
    元素的高度: height + padding(上下)
     
     
    获取元素的位置
    元素.offsetLeft 和offsetTop
    获取元素的坐标,获取当前节点对象的padding的外边界,距离border外边界的距离。实际上就是左边框的厚度
    offsetWidth: 为元素的width+元素的padding+边框的宽度
    以offsetLeft为例进行说明,在不同的浏览器中其值不同,且与父元素的position属性(relative,absolute,fixed)有关。现分以下几种情况说明:(测试所用的浏览器版本为:Chrome 68.0.3440.106, opera54.0, Firefox61.0.1和IE11.0)
    2.1在父元素均不设置position属性时,在Chrome,opera和IE浏览器中offsetLeft是元素边框外侧到浏览器窗口内侧的距离且body.offsetLeft=0,
     
     在firefox浏览器中offsetLeft是元素边框外侧到body内侧的距离body.offsetLeft=-边框宽度
    如图:
    2.2当父元素设置position元素时又分为两种情况,
    2.2.1如果父元素时body且body设置了position属性,在Chrome和opera浏览器中offsetLeft是元素边框外侧到body边框外侧的距离,
     
     在IE和fireForx浏览器中offsetLeft是元素边框外侧到body边框内侧的距离
     
     
    图解client系列属性
    获取元素的大小
    在使用scroll系列的时候,一般页面的结果是①大容器套小容器②大容器相对定位或者绝对定位,小容器绝对定位③小容器位置变化④在大容器中注册scroll事件⑤在滚动的时候scroll事件在触发,然后利用scrollTop即可看到滚出去的距离,得到的结果是数字
     
    语法
    元素.scrollWidth 和 元素.scrollHieght
    获取当前节点对象的宽度和高度,返回数字,不包含单位。
    宽度:width+padding(左右)+ 溢出部分
    高度:height+padding(上下)+ 溢出部分
     
     
    获取元素中被卷去的距离
    元素.scrollLeft 和 元素.scrollTop
    作用:获取元素内部总被卷去的内容的横向距离 和 纵向距离 !
     
     
     
    获取可视区域的宽度和高度 innerWidth 和 innerHeight 属性
    基本动画【一】 (tab 切换用)
     
    动画显示
    元素.show([speed],[callback])
    参数:① speed ,可选,表示动画执行时长,数字 表示毫秒。 也可用字符串 slow(600)、normal(400)、fast(200)。
    ② callback,可选,表示动画执行完后要执行的程序,用函数 表示。
     
    动画隐藏
    元素.hide([speed],[callback])
    参数:① speed ,可选,表示动画执行时长,数字 表示毫秒。 也可用字符串 slow(600)、normal(400)、fast(200)。
    ② callback,可选,表示动画执行完后要执行的程序,用函数 表示。
     
    动画切换
    元素.toggle([speed],[callback])
    参数:① speed ,可选,表示动画执行时长,数字 表示毫秒。 也可用字符串 slow(600)、normal(400)、fast(200)。
    ② callback,可选,表示动画执行完后要执行的程序,用函数 表示。
     
    基本动画【二】(轮播图常用)
    动画显示
    元素.slideDown([speed],[callback])
    参数:
    ① speed ,可选,表示动画执行时长,数字 表示毫秒。 也可用字符串 slow(600)、normal(400)、fast(200)。
    ② callback,可选,表示动画执行完后要执行的程序,用函数 表示。
    动画隐藏
    元素.slideUp([speed],[callback])
    参数:
    ① speed ,可选,表示动画执行时长,数字 表示毫秒。 也可用字符串 slow(600)、normal(400)、fast(200)。
    ② callback,可选,表示动画执行完后要执行的程序,用函数 表示。
     
    动画切换
    元素.slideToggle([speed],[callback])
    参数:
    ① speed ,可选,表示动画执行时长,数字 表示毫秒。 也可用字符串 slow(600)、normal(400)、fast(200)。
    ② callback,可选,表示动画执行完后要执行的程序,用函数 表示。

     

     
    基本动画【三】
    动画显示
    元素.fadeIn([speed],[callback])
    参数: ① speed ,可选,表示动画执行时长,数字 表示毫秒。 也可用字符串 slow(600)、normal(400)、fast(200)。
    ② callback,可选,表示动画执行完后要执行的程序,用函数 表示。
     
    动画隐藏
    元素.fadeOut([speed],[callback])
    参数: ① speed ,可选,表示动画执行时长,数字 表示毫秒。 也可用字符串 slow(600)、normal(400)、fast(200)。
    ② callback,可选,表示动画执行完后要执行的程序,用函数 表示。
     
    动画切换
    元素.fadeToggle([speed],[callback])
    参数: ① speed ,可选,表示动画执行时长,数字 表示毫秒。 也可用字符串 slow(600)、normal(400)、fast(200)。
    ② callback,可选,表示动画执行完后要执行的程序,用函数 表示。
     
    自定义动画
    元素.animate({params},[speed],[easing],[callback]);
    参数
    ① params ,必选。 表示运动的哪些样式属性,用对象 表示。
    ② [speed] ,可选,表示动画执行时长,数字 表示毫秒。
    ③ [easing] ,可选,表示运动的方式,默认为swing(缓动)慢快慢 可以是linear(匀速)。
    ④ callback,可选,表示动画执行完后要执行的程序,用函数 表示。
     
     
    动画的队列和动画的停止
    元素.stop([clearQueue], [jumpToEnd]);
    参数:
    clearQueue ,可选,表示是否清空动画队列。 默认为false。
    若是false 时,会停止当前这一个动画,开始队列中的下一个动画
    若是true 时,停止动画并清空所有的动画队列。
    jupmToEnd ,可选,表示是否让当前动画直接达到目标值。默认为false
    若是false 时,会直接停止当前动画,不会达到目标值。
    若是true 时,则会停止当前动画,直接达到目标值。
     
     
    window对象中的定时器方法
    setTimeout(callback, time);
    作用:超时调用,仅执行一次 。定时炸弹
    参数:
    callback,函数,表示超时时要执行的程序。
    time,数字,表示毫秒数
    返回值:返回一个数字,标识这一个定时器。

     

    清除setTimeout定时器
    语法:clearTimeout(定时器数字标识);
    代码:
    <script>
        // 创建一个定时器,并用变量接收定时器返回的标识。
        var flag = setTimeout(function () {
            alert('爆炸');
        }, 3000);
        // 获取按钮元素
        var stop = document.getElementById('stop');
        // 给按钮元素注册点击事件
        stop.onclick = function () {
            // 清除定时器
            clearInterval(flag);
        };
    </script>
     
    setInterval(callback, time);
    作用:超时调用,重复执行(每间隔一段时间执行一次)。 定时闹钟
    参数:
    callback,函数,表示超时时要执行的程序。
    time,数字,表示毫秒数
    返回值:返回一个数字,标识这一个定时器。

     

    清除setInterval定时器
    语法:clearInterval(定时器数字标识);
    注意: 在点击事件中使用setInterval 为了防止多次调用 要先清一次定时器
     
     
    页面加载时间
    onload
    作用:页面所有程序加载(页面元素、图片、媒体资源、外联等)完后执行的代码

     

    Onunload
    页面卸载完后(刷新),要执行的代码




    location对象介绍
    ​ location对象可以用来操作地址栏中的地址
    URL介绍
    URL统一资源定位符 (Uniform Resource Locator, URL),指的就是网址
    URL的组成: scheme://host:port/path?query#fragment
    scheme:通信协议
    常用的http,https,ftp,maito等
    host:主机
    服务器(计算机)域名系统 (DNS) 主机名或 IP 地址。
    port:端口号
    整数,可选,省略时使用方案的默认端口,如http的默认端口为80。
    path:路径
    由零或多个'/'符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
    query:查询
    可选,用于给动态网页传递参数,可有多个参数,用'&'符号隔开,每个参数的名和值用'='符号隔开。例如:name=zs
    fragment:信息片断
    字符串,锚点.

     
    3.3 location对象中的属性
     


    3.4 location对象中的方法
    location.assign('url');
    <!-- 跳转到新的页面,并会把之前的页面保存在历史记录中--><button onclick="location.assign('https://www.jd.com')">跳转到京东</button>

     

    location.replace('url');
    <!--跳转到新的页面,但不会把之前的页面保存在历史记录中--><button onclick="location.replace('https://www.jd.com')">跳转到京东</button>

     

    location.reload();
    <!--刷新当前页面--><button onclick="location.reload()">刷新</button>



    四. BOM中的history对象【了解】

     

    history对象介绍
    用来操作历史记录

     

    history对象中常用的方法
    history.back(); // 点击向左的按钮
    代码
    <!--加载上一个历史记录-->
    <button onclick="history.back()">上一个页面</button>



    history.forward(); // 点击向右的按钮
    代码
    <!--加载下一个历史记录-->
    <button onclick="history.forward()">下一个页面</button>

     

    history.go(num);
    <!--加载上一个历史记录-->
    <button onclick="history.go(-1)">上一个页面</button>
    <!--加载下一个历史记录-->
    <button onclick="history.go(1)">下一个页面</button>

     

    五. BOM中的Navigator对象【了解】
    navigator对象介绍
    用来获取当前浏览器的信息(所在的系统、浏览器的版本)

     

    navigator对象中常见的属性
    navigator.userAgent[ 重点 ]
    通过userAgent可以判断用户浏览器的类型

     

    navigator.platform
    通过platform可以判断浏览器所在的系统平台类型.

     

    背景:
    很多服务器为了兼容网景公司的浏览器与IE浏览器, 就在服务器中加入了一个判断, 来检查浏览器的类型.
    此时有很多浏览器出现, 新出的浏览器偷大牌的 navigator, 来欺骗服务器
    后来移动端出现了, 这个浏览器的类型就起作用了
     
     
     
     
     
     
     
     
    参数
  • 相关阅读:
    POJ2945 Find the Clones trie树
    BZOJ 3796 Mushroom追妹纸 哈希+二分(+KMP)
    java-web的mybatis的学习
    关于字符串split一些用法
    hive 中简单的udf函数编写
    hive 用户行为分析(活跃。启动,留存,回访,新增)的一些经典sql
    浏览收藏夹 看到了hadoop3.0 的改动
    pythonDay01
    关于java 操作linux命令的 一些相关
    需求中碰到的简单Map集合 key相同合并 value的思路
  • 原文地址:https://www.cnblogs.com/maxiag/p/10324529.html
Copyright © 2020-2023  润新知