• javascript基础(内置对象、BOM、DOM、JSON、AJAX)


    BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”。

    DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。

    JSON 是一种基于文本的数据交换格式;JSONP是一种非官方跨域数据交互协议。

    AJAX 用于交互式页面,实现页面异步更新,减少后台于服务器的数据交换。

    一、BOM

    1、window对象

      window对象表示浏览器窗口,

       一些常用的Window方法:

    • window.innerHeight - 浏览器窗口的内部高度
    • window.innerWidth - 浏览器窗口的内部宽度
    • window.open() - 打开新窗口
    • window.close() - 关闭当前窗口

    2、window的子对象

      1、navigator对象

    navigator.appName  // Web浏览器全称
    navigator.appVersion  // Web浏览器厂商和版本的详细字符串
    navigator.userAgent  // 客户端绝大部分信息
    navigator.platform   // 浏览器运行所在的操作系统

      2、screen对象

    screen.availWidth - 可用的屏幕宽度
    screen.availHeight - 可用的屏幕高度

      3、history对象

        window.history对象包含浏览器的历史

    history.forward()  // 前进一页
    history.back()  // 后退一页

      4、location对象

        window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。

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

      5、弹出框

        可以在 JavaScript 中创建三种消息框:警告框alert、确认框confirm、提示框prompt。

      6、记时

        通过使用 JavaScript,我们可以在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件

      setTimeout()

        
    var t=setTimeout("JS语句",毫秒)

    第二个参数指示从当前起多少毫秒后执行第一个参数(1000 毫秒等于一秒)

      clearTimeout()

        
    clearTimeout(setTimeout_variable)  

    实例:

    // 在指定时间之后执行一次相应函数
    var timer = setTimeout(function(){alert(123);}, 3000)
    // 取消setTimeout设置
    clearTimeout(timer);
    

      setInterval()

    setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。

    setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。

    setInterval("JS语句",时间间隔)

    clearInterval()

    clearInterval() 方法可取消由 setInterval() 设置的 timeout。

    clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。

    语法:

    1
    clearInterval(setinterval返回的ID值)  

    示例:  

    1
    2
    3
    4
    // 每隔一段时间就执行一次相应函数
    var timer = setInterval(function(){console.log(123);}, 3000)
    // 取消setInterval设置
    clearInterval(timer);  

    二、DOM

      DOM(Document Object Model)是一套对文档的内容进行抽象和概念化的方法。 

      当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)

    1、HTML DOM树

     HTML DOM 模型被构造为对象的树。

     DOM标准规定HTML文档中的每个成分都是一个节点(node):

    • 文档节点(document对象):代表整个文档
    • 元素节点(element 对象):代表一个元素(标签)
    • 文本节点(text对象):代表元素(标签)中的文本
    • 属性节点(attribute对象):代表一个属性,元素(标签)才有属性
    • 注释是注释节点(comment对象) 

    2、查找标签

    • 直接查找
    1
    2
    3
    document.getElementById           根据ID获取一个标签
    document.getElementsByClassName   根据class属性获取
    document.getElementsByTagName     根据标签名获取标签合集 

    注意:

    涉及到DOM操作的JS代码应该放在文档的哪个位置。

    • 间接查找
    1
    2
    3
    4
    5
    6
    parentElement            父节点标签元素
    children                 所有子标签
    firstElementChild        第一个子标签元素
    lastElementChild         最后一个子标签元素
    nextElementSibling       下一个兄弟标签元素
    previousElementSibling   上一个兄弟标签元素

    3、节点操作

    • 创建节点
     createElement(标签名)

      示例:

    var divEle = document.createElement("div");

    添加节点       -追加一个子节点(作为最后的子节点)

    somenode.appendChild(newnode);

    把增加的节点放到某个节点的前边。

    somenode.insertBefore(newnode,某个节点);
    • 删除节点  -获得要删除的元素,通过父元素调用删除。
    removeChild(要删除的节点)
    • 替换节点
    somenode.replaceChild(newnode, 某个节点);
    • 属性节点

      获取文本节点的值

    var divEle = document.getElementById("d1")
    divEle.innerText      //标签(子标签)的文本内容
    divEle.innerHTML      //全部(子标签及子标签的文本内容)

      设置文本节点的值

    var divEle = document.getElementById("d1")
    divEle.innerText="1"
    divEle.innerHTML="<p>2</p>"
    • 获取值操作
    elementNode.value

    4、事件

    onclick        当用户点击某个对象时调用的事件句柄。
    ondblclick     当用户双击某个对象时调用的事件句柄。
     
    onfocus        元素获得焦点。               // 练习:输入框
    onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
    onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)
     
    onkeydown      某个键盘按键被按下。          应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
    onkeypress     某个键盘按键被按下并松开。
    onkeyup        某个键盘按键被松开。
    onload         一张页面或一幅图像完成加载。
    onmousedown    鼠标按钮被按下。
    onmousemove    鼠标被移动。
    onmouseout     鼠标从某元素移开。
    onmouseover    鼠标移到某元素之上。
     
    onselect      在文本框中的文本被选中时发生。
    onsubmit      确认按钮被点击,使用的对象是form。
    • 绑定方式
    • 方式一
      <div id="d1" onclick="changeColor(this);">点我</div>
      <script>
        function changeColor(ths) {
          ths.style.backgroundColor="green";
        }
      </script>

    注意:

    this是实参,表示触发事件的当前元素。

    函数定义过程中的ths为形参。

    方式二

    <div id="d2">点我</div>
    <script>
      var divEle2 = document.getElementById("d2");
      divEle2.onclick=function () {
        this.innerText="呵呵";
      }
    </script>

    三、 JSON

      用JSON来传数据,靠JSONP来跨域

    1、JSON的优点:

      1、基于纯文本,跨平台传递极其简单;

      2、Javascript原生支持,后台语言几乎全部支持;

      3、轻量级数据格式,占用字符数量极少,特别适合互联网传递;

      4、可读性较强,虽然比不上XML那么一目了然,但在合理的依次缩进之后还是很容易识别的;

      5、容易编写和解析

    2、JSON的格式或者叫规则:

      1、JSON只有两种数据类型描述符,大括号{}和方括号[],其余英文冒号:是映射符,英文逗号,是分隔符,英文双引号""是定义符。

      2、括号{}用来描述一组“不同类型的无序键值对集合”(每个键值对可以理解为OOP的属性描述),方括号[]用来描述一组“相同类型的有序数据集合”(可对应OOP的数组)。

      3、上述两种集合中若有多个子项,则通过英文逗号,进行分隔。

      4、键值对以英文冒号:进行分隔,并且建议键名都加上英文双引号"",以便于不同语言的解析。

      5、JSON内部常用数据类型无非就是字符串、数字、布尔、日期、null 。(字符串必须用双引号引起来)

    JSON实例:

    // 描述一个人
    
    var person = {
        "Name": "Bob",
        "Age": 32,
        "Company": "IBM",
        "Engineer": true
    }
    
    // 获取这个人的信息
    
    var personAge = person.Age;
    
    // 描述几个人
    
    var members = [
        {
            "Name": "Bob",
            "Age": 32,
            "Company": "IBM",
            "Engineer": true
        },
        {
            "Name": "John",
            "Age": 20,
            "Company": "Oracle",
            "Engineer": false
        },
        {
            "Name": "Henry",
            "Age": 45,
            "Company": "Microsoft",
            "Engineer": false
        }
    ]
    
    // 读取其中John的公司名称
    
    var johnsCompany = members[1].Company;
    
    // 描述一次会议
    
    var conference = {
        "Conference": "Future Marketing",
        "Date": "2012-6-1",
        "Address": "Beijing",
        "Members": 
        [
            {
                "Name": "Bob",
                "Age": 32,
                "Company": "IBM",
                "Engineer": true
            },
            {
                "Name": "John",
                "Age": 20,
                "Company": "Oracle",
                "Engineer": false
            },
            {
                "Name": "Henry",
                "Age": 45,
                "Company": "Microsoft",
                "Engineer": false
            }
        ]
    }
    
    // 读取参会者Henry是否工程师
    
    var henryIsAnEngineer = conference.Members[2].Engineer;

    ----------------补充一下JSONP-------------------

    这边了解一下JSONP

      JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析。

    JSONP是怎么产生的?

    1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准;

    2、不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>);

    3、于是可以判断,当前阶段如果想通过纯web端(ActiveX控件、服务端代理、属于未来的HTML5之Websocket等方式不算)跨域访问数据就只有一种可能,那就是在远程服务器上设法把数据装进js格式的文件里,供客户端调用和进一步处理;

    4、恰巧我们已经知道有一种叫做JSON的纯字符数据格式可以简洁的描述复杂数据,更妙的是JSON还被js原生支持,所以在客户端几乎可以随心所欲的处理这种格式的数据;

    5、这样子解决方案就呼之欲出了,web客户端通过与调用脚本一模一样的方式,来调用跨域服务器上动态生成的js格式文件(一般以JSON为后缀),显而易见,服务器之所以要动态生成JSON文件,目的就在于把客户端需要的数据装入进去。

    6、客户端在对JSON文件调用成功之后,也就获得了自己所需的数据,剩下的就是按照自己需求进行处理和展现了,这种获取远程数据的方式看起来非常像AJAX,但其实并不一样。

    7、为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

    对ajax与jsonp的异同再做一些补充说明:

    1、ajax和jsonp这两种技术在调用方式上“看起来”很像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,因此jquery和ext等框架都把jsonp作为ajax的一种形式进行了封装;

    2、但ajax和jsonp其实本质上是不同的东西。ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本。

    3、所以说,其实ajax与jsonp的区别不在于是否跨域,ajax通过服务端代理一样可以实现跨域,jsonp本身也不排斥同域的数据的获取。

    4、还有就是,jsonp是一种方式或者说非强制性协议,如同ajax一样,它也不一定非要用json格式来传递数据,如果你愿意,字符串都行,只不过这样不利于用jsonp提供公开服务。

    四、AJAX

      原生的 Ajax 主要就是使用 XmlHttpRequest 对象来完成请求的操作

      1、Ajax包括:
        XHTML和CSS 
        使用文档对象模型(Document Object Model)作动态显示和交互 
        使用XML和XSLT做数据交互和操作 
        使用XMLHttpRequest进行异步数据接收 
        使用JavaScript将它们绑定在一起

      2、Ajax处理过程

      一个Ajax交互从一个称为XMLHttpRequest的JavaScript对象开始。如同名字所暗示的,它允许一个客户端脚本来执行HTTP请求,并且将会解析一个XML格式的服务器响应。Ajax处理过程中的第一步是创建一个XMLHttpRequest实例。使用HTTP方法(GET或POST)来处理请求,并将目标URL设置到XMLHttpRequest对象上。

      当你发送HTTP请求,你不希望浏览器挂起并等待服务器的响应,取而代之的是,你希望通过页面继续响应用户的界面交互,并在服务器响应真正到达后处理它们。要完成它,你可以向XMLHttpRequest注册一个回调函数,并异步地派发XMLHttpRequest请求。控制权马上就被返回到浏览器,当服务器响应到达时,回调函数将会被调用。

      在Java Web服务器上,到达的请求与任何其它HttpServletRequest一样。在解析请求参数后,servlet执行必需的应用逻辑,将响应序列化到XML中,并将它写回HttpServletResponse。

    注:

      ajax在上一篇文章有详细介绍:https://www.cnblogs.com/yjf713/p/13341376.html

  • 相关阅读:
    Redis学习第八课:Redis高级实用特性(二)
    Redis学习第八课:Redis高级实用特性(一)
    Redis学习第七课:键值命令和服务器命令
    Redis学习第六课:Redis ZSet类型及操作
    Redis学习第五课:Redis Set类型及操作
    Redis学习第四课:Redis List类型及操作
    (error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.
    Clickhouse单机及集群部署详解
    一致性模型及一致性协议
    HBase存储及读写原理介绍
  • 原文地址:https://www.cnblogs.com/yjf713/p/13358074.html
Copyright © 2020-2023  润新知