zoukankan      html  css  js  c++  java
  • 前端之JavaScript函数以及BOM、DOM操作等相关内容-57

    函数与BOM、DOM操作

    1.函数

    1.javascript中的变量提升和函数提升

    1、在js中只有两种作用域

    #1、全局作用域

    #2、函数作用域

    在ES6之前,js是没有块级作用域。
    首先来解释一下什么是没有块级作用域?

    img

    2、什么是变量提升?

    在我们的js中,代码的执行时分两步走的,1、解析 2、一步一步执行

    那么变量提升就是变量声明会被提升到作用域的最顶上去,也就是该变量不管是在作用域的哪个地方声明的,都会提升到作作用域的最顶上去。

    img

    上面这种写法其实等价于下面这种写法:

    img

    看几个例子:

    img

    把上面的例子稍作改动:

    结果就会大不一样,

    img

    在看一个例子

    img

    3:什么是函数提升?

    img

    输出结果

    生命不息 奋斗不止
    ƒ fn(){

      console.log('生命不息 奋斗不止');

    }
    生命不息 奋斗不止

    注意:函数声明式,会将函数的声明和定义一起提升到作用域的最顶上去。

    如果是这种写法:函数表达式声明的函数

    img

    输出结果

    ƒ fn(){
      console.log('生命不息 奋斗不止');
    }
    ƒ fn(){
      console.log('生命不息 奋斗不止');
    }

    最后一个例子

    img

    输出结果

    ƒ fn(){
      console.log('生命不息 奋斗不止');
    }
    hello

    最后总结

    #1:所有的声明都会提升到作用域的最顶上去。

    #2:同一个变量只会声明一次,其他的会被忽略掉。

    #3:函数声明的优先级高于变量申明的优先级,并且函数声明和函数定义的部分一起被提升。

    2.BOM与DOM操作

    1.BOM操作

    1.1 介绍

    BOM:Browser Object Model,浏览器对象模型。BOM的结构图:

    img

    从上图可以看出来:

    #1、DOM对象也是BOM的一部分

    #2、window对象是BOM的顶层(核心)对象

    需要注意的是

    #1、在调用window对象的方法和属性时,可以省略window,例如:window.document.location可以简写为document.location

    #2、全局变量也是windows对象的属性,全局的函数时window对象的方法

    1.2 对象history、navigator、screen

    #1、history对象包不包含浏览器的历史
    history.back() //后退一页,等同于history.go(-1)
    history.forward() //前进一页,等同于history.go(1)
    history.go(0) //0是刷新
    用的不多。因为浏览器中已经自带了这些功能的按钮:

    #2、navigator对象包含了浏览器相关信息。
    navigator.appName  // Web浏览器全称
    navigator.userAgent  // 客户端绝大部分信息
    navigator.platform   // 浏览器运行所在的操作系统

    #3、可以用screen对象得到可用的屏幕宽读和高度
    screen.availWidth //可用的屏幕宽度
    screen.availHeight //可用的屏幕高度

    1.3 localtion对象

    location.href  //获取URL
    location.href="URL" // 跳转到指定页面
    location.reload() //重新加载页面

    1.4 弹出系统对话框

    alert(1)是window.alert(1)的简写,因为它是window的子方法。

    系统对话框有三种:

      alert("egon警告你:人丑还不读书,是找不到女朋友的"); //不同浏览器中的外观是不一样的
      confirm("你真的要这么做吗小伙子"); //兼容不好
      prompt("输入用户名:");   //不推荐使用# 示例
    var x=confirm("你真到要这么做吗")
    console.log(x)

    var username=prompt("输入用户名:")
    console.log(username);

    1.5 打开关闭窗口

    #1、open("url地址","新窗口的位置_blank或者_self","新窗口的特征")
    window.open("http://www.w3school.com.cn","_blank", "width=400, height=400")

    #2、close()关闭当前窗口
    var x=window.open("http://www.w3school.com.cn","_blank", "width=400, height=400")
    x.close()

    1.6 浏览器窗口内部的高度和宽度

    window.innerHeight - 浏览器窗口的内部高度
    window.innerWidth - 浏览器窗口的内部宽度

    1.7 定时器

    #1.setTimeOut()
    只在指定时间后执行一次,通常用于延迟执行某方法或功能,

    //定时器 异步运行  
    function say(){  
      alert("hello");  
    }  
    //使用方法名字执行方法  
    var t1 = setTimeout(say,1000);  
    var t2 = setTimeout("say()",3000); //使用字符串执行方法  
    clearTimeout(t2); //去掉定时器


    #2.setInterval()
    在指定时间为周期循环执行,通常用于刷新表单,对于一些表单的假实时指定时间刷新同步,动画效果等。

    //实时刷新时间单位为毫秒  
    var t3 = setInterval(say,3000);  
    var t4 = setInterval('say()',3000);  

    clearInterval(t3);
    clearInterval(t4);

    2.DOM操作

    2.1 介绍

    当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model),DOM标准规定HTML文档中的每个成员都是一个节点(node),HTML DOM树如下图

    img

    2.2 查找节点

    #1、直接查找
    document.getElementById                 #根据ID获取唯一一个标签
    document.getElementsByClassName   #根据class属性获取一系列标签
    document.getElementsByTagName     #根据标签名获取一系列标签

    #2、间接查找如下表
    语法含义
    childNodes 获取所有的子节点,除了元素还有文本等
    children 获取所有元素子节点,不包含文本
    parentNode 获取父节点
    previousSibling 获取上一个兄弟节点,包含文本
    previousElementSibling 获取上一个兄弟元素节点,不包含文本
    nextSibling 获取下一个兄弟节点,包含文本
    nextElementSibling 获取下一个兄弟元素节点,不包含文本
    firstChild 获取第一个子节点,包含文本
    firstElementChild 获取第一个子节点,不包含文本
    lastChild 获取最后一个子节点,包含文本
    lastElementChild 获取父元素最后一个元素节点。不包含文本

    2.3 增加节点

    #1、创建新节点
    var divEle = document.createElement('div');

    #2、追加一个子节点(放到最后)
    somenode.appendChild(新的子节点);

    #3、插入一个子节点(插入到某个节点前)
    somenode.insertBefore(新的子节点,某个节点);

    2.4 删除、替换节点

    somenode.removeChild(要删除的子节点);
    somenode.replaceChild(新的子节点, 某个子节点);

    2.5 修改/设置节点属性

    #1、获取文本节点的值:
    var divEle = document.getElementById("d1")
    divEle.innerText
    divEle.innerHTML

    #2、设置文本节点的值:
    var divEle = document.getElementById("d1")
    divEle.innerText="1"
    divEle.innerHTML="<p>2</p>"

    #3、attribute操作
    var divEle = document.getElementById("d1");
    divEle.setAttribute("age","18")
    divEle.getAttribute("age")
    divEle.removeAttribute("age")

    #4、自带的属性还可以直接.属性名来获取和设置
    imgEle.src
    imgEle.src="..."

    2.6 获取元素的值

    #适用于input、select、textarea标签

    var x=document.getElementById('input')
    var y=document.getElementById('select')
    var z=document.getElementById('textarea')

    x.value
    y.value
    z.value

    2.7 class操作

    var x=document.getElementById('div1')

    x.classList.remove('col1')
    x.classList.add('col1')
    x.classList.contains('col1')
    x.classList.toggle('col1')

    2.8 css操作

    obj.style.backgroundColor="red"

    JS操作CSS属性的规律:

    1.对于没有中横线的CSS属性一般直接使用style.属性名即可。如:

    obj.style.margin
    obj.style.width
    obj.style.left
    obj.style.position

    2.对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。如:

    obj.style.marginTop
    obj.style.borderLeftWidth
    obj.style.zIndex
    obj.style.fontFamily

    2.9 事件

    HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时执行一段JavaScript。下面是一个属性列表,这些属性可插入 HTML 标签来定义事件动作。

    1、常用事件

    onclick        当用户点击某个对象时调用的事件句柄。
    ondblclick     当用户双击某个对象时调用的事件句柄。

    onfocus       元素获得焦点。               // 练习:输入框
    onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
    onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)

    onkeydown     某个键盘按键被按下。         应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
    onkeypress     某个键盘按键被按下并松开。
    onkeyup       某个键盘按键被松开。
    onload         一张页面或一幅图像完成加载。
    onmousedown   鼠标按钮被按下。
    onmousemove   鼠标被移动。
    onmouseout     鼠标从某元素移开。
    onmouseover   鼠标移到某元素之上。

    onselect     在文本框中的文本被选中时发生。
    onsubmit     确认按钮被点击,使用的对象是form。

    2、绑定方式

    #方式一:
    <div id="div1" onclick="changeColor(this);">我是div,我去你妹的,点我</div>
    <script>
    function changeColor(ths) {
      ths.style.backgroundColor="green";
    }
    </script>

    注意:
    this是实参,表示触发事件的当前元素。
    函数定义过程中的ths为形参。

    #方式二:
    <div id="div1">来,点亮我的绿</div>
    <script>
      var oDiv = document.getElementById('div1');
      oDiv.onclick = function() {
          this.style.backgroundColor = 'red';
      }
    </script>
  • 相关阅读:
    Python 类中方法的内部变量,命名加'self.'变成 self.xxx 和不加直接 xxx 的区别
    用foreach遍历 datagridView 指定列所有的内容
    treeView1.SelectedNode.Level
    YES NO 上一个 下一个
    正则 单词全字匹配查找 reg 边界查找 精确匹配 只匹配字符 不含连续的字符
    抓取2个字符串中间的字符串
    sqlite 60000行 插入到数据库只用不到2秒
    将多行文本以单行的格式保存起来 读和写 ini
    将秒转换成时间格式
    richtextbox Ctrl+V只粘贴纯文本格式
  • 原文地址:https://www.cnblogs.com/usherwang/p/13720660.html
Copyright © 2011-2022 走看看