zoukankan      html  css  js  c++  java
  • 前端基础之BOM和DOM

      JavaScript分为ECMAScript,DOM,BOM

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

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

    一、window对象

      全局变量是window对象的属性。全局函数是window对象的方法。

      一些常用的window方法:

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

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

        window.open() - 打开新窗口

        window.close() - 关闭当前窗口

    二、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 = 'https:www.jd.com' // 跳转到指定页面
    location.reload() // 重新加载页面

      5、弹出框

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

         警告框:

    alert('who are you?') // 弹出警告框

         确认框:用户点击确认返回true,点击取消返回false。

    confirm('who are you?') // 弹出确认框有确定和取消两个按钮

         提示框:用户点击确认返回输入的值,用户点击取消返回值为null。

    prompt('请在下方输入你的用户名','guo xu haha') // 弹出提示框能进行输入

      6、计时相关

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

         setTimeout() : 会返回某个值。

    // 在指定时间之后执行一次相应函数
    var timer = setTimeout(function(){alert(123);},3000) // 这里是毫秒
    // 取消setTimeout设置
    clearTimeout(timer); // 把setTimeout方法存储在timer变量中,来取消设置

         setinterval() :会不停的调用函数或计算表达式,直到clearInterval()被调用或窗口被关闭。

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

         定时器示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="x-ua-compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>定时器</title>
      <script>
        var intervalId;
    
        function f() {
          var timeStr = (new Date()).toLocaleString();
          var inputEle = document.getElementById("i1");
          inputEle.value = timeStr;
        }
    
        function start() {
          f();
          if (intervalId === undefined) {
            intervalId = setInterval(f, 1000);
          }
        }
        function end() {
          clearInterval(intervalId);
          intervalId = undefined;
        }
    
      </script>
    </head>
    <body>
    
    <input type="text" id="i1">
    <input type="button" value="开始" id="start" onclick="start();">
    <input type="button" value="结束" id="end" onclick="end();">
    </body>
    </html>

    三、HTML DOM 树

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

        ★ 文档节点(document对象):代表整个文档

        ★ 元素节点(element对象):代表一个元素(标签)

        ★ 文本节点(text对象):代表元素(标签)中的文本

        ★ 属性节点(attribute对象):代表一个属性,元素(标签)才有属性

        ★ 注释是注释节点(comment对象)

      JavaScript可以通过DOM创建动态的HTML:

        ★ JavaScript能够改变页面中的所有HTML元素

        ★ JavaScript能够改变页面中的所有HTML属性

        ★ JavaScript能够改变页面中的所有CSS样式

        ★ JavaScript能够对页面中的所有事件作出反应

    四、查找标签

      1、直接查找

    document.getElementById('id');             // 根据ID获取一个标签 
    document.getElementsByClassName('c1');     // 根据class属性获取(取到的是一个数组)
    document.getElementsByTagName('div');      // 根据标签名获取标签集合(取到的是数组) 

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

      2、间接查找

    parentElement                     父节点标签元素
    // 以下都需要 var Ele = document.getElementById('d1');这一步操作找一个标签在进行操作 children 所有字标签(Ele.children) firstElementChild 第一个字标签元素 lastElementChild 最后一个字标签元素 nextElementSibling 下一个兄弟标签元素 previousElementSibling 上一个兄弟标签元素

    五、节点操作

      1、创建节点

    var divEle = document.createElement('div'); // 这里是标签名

      2、添加节点

    // 创建一个img标签并把这个对象赋值给imgEle
    var imgEle = document.createElement('img');
    // 设置img标签中的scr属性
    imgEle.setAttribute('scr',"http://image11.m1905.cn/uploadfile/s2010/0205/20100205083613178.jpg");
    
    // 从文档中找到ID为‘d1’的标签
    var d1Ele = document.getElementById('d1');
    // 追加一个子节点(作为最后的子节点)
    d1Ele.appendChild(imgEle);
    
    // 把增加的节点放到某个节点的前边。somenode是一个父标签
    somenode.insertBefore(newnode,某个节点);

      3、删除节点

         获取要删除的元素,通过父元素调用删除。

         removeChild(要删除的节点);

      4、替换节点

         somenode.replaceChild(newnode,某个节点);

      5、属性节点

         获取文本节点的值:

    var divEle = document.getElementById('d1');
    divEle.innerText  // 只打印内容不打印标签
    divEle.innerHTML  // 带标签的内容

         设置文本节点的值:

    var divEle = document.getElementById('d1');
    divEle.innerText = '1';
    divEle.innerHTML = '<p>2</p>';

         attribute操作:

    var divEle = document.getElementById('d1');
    divEle.setAttribute('age','18');
    divEle.getAttribute('age');
    divEle.removeAttribute('age');
    
    // 自带的属性还可以直接,属性名来获取和设置
    imgEle.src
    imgEle.src = '...'

      6、获取值操作

         elementNode.value

         适用于以下标签:

         ★ input

         ★ select 如果option中的value没有值,则取值的话显示被option标签包裹的内容

         ★ textarea

    var iEle = document.getElementById('i1');
    console.log(iEle.value);
    var sEle = document.getElementById('s1');
    console.log(sEle.value);
    var tEle = document.getElementById('t1');
    console.log(tEle.value);

      7、class的操作

    className                  获取所有样式类名(字符串)
    classList.remove(cls)   删除指定类
    classList.add(cls)        添加类
    classList.contains(cls) 存在返回true,否则返回false
    classList.toggle(cls)     存在就删除,否则添加

      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

    六、事件

      1、常用事件

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

      2、绑定方式

         方式一:

    <div id="d1" onclick="changeColor(this);">点我</div>
    <script>
        function changeColor(ths) {
            ths.style.backgroundColor = 'green';
        }
    </script>

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

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

         方式二:

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

        事件示例:

    // 搜索框
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>搜索框示例</title>
    
    </head>
    <body>
        <input id="d1" type="text" value="请输入关键字" onblur="blur()" onfocus="focus()">
        
    <script>
    function focus(){
        var inputEle=document.getElementById("d1");
        if (inputEle.value==="请输入关键字"){
            inputEle.value="";
        }
    }
    
    function blur(){
        var inputEle=document.getElementById("d1");
        var val=inputEle.value;
        if(!val.trim()){
            inputEle.value="请输入关键字";
        }
    }
    </script>
    </body>
    </html>
    
    搜索框示例

        

    // select联动
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="x-ua-compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>select联动</title>
    </head>
    <body>
    <select id="province">
      <option>请选择省:</option>
    </select>
    
    <select id="city">
      <option>请选择市:</option>
    </select>
    
    <script>
      data = {"河北省": ["廊坊", "邯郸"], "北京": ["朝阳区", "海淀区"], "山东": ["威海市", "烟台市"]};
    
      var p = document.getElementById("province");
      var c = document.getElementById("city");
    
      for (var i in data) {
        var optionP = document.createElement("option");
        optionP.innerHTML = i;
        p.appendChild(optionP);
      }
      p.onchange = function () {
        var pro = (this.options[this.selectedIndex]).innerHTML;
        var citys = data[pro];
        // 清空option
        c.innerHTML = "";
    
        for (var i=0;i<citys.length;i++) {
          var option_city = document.createElement("option");
          option_city.innerHTML = citys[i];
          c.appendChild(option_city);
        }
      }
    </script>
    </body>
    </html>
    
    select联动

               

        

  • 相关阅读:
    简单多线程创建
    ajax 实现局部页面更新
    基础分页查询解题思路
    cookie实现登录时间记录
    servlet过滤器
    jstl标签 URL智能寻找路径
    taglib遍历foreach循环list集合
    python之内置高阶函数
    python之lambda的使用
    python中的函数
  • 原文地址:https://www.cnblogs.com/wjs521/p/9600773.html
Copyright © 2011-2022 走看看