• 前端基础之BOM和DOM


    概念

    JavaScript分为ECMAScript,DOM,BOM

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

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

    Window对象是客户端JavaScript最高层对象之一,由于window对象是其他大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成:document.write()。

    BOM对象(重点)

    windwo对象       

    所有浏览器都支持window对象。

    概念上讲,一个HTML文档对应一个window对象

    功能上讲,控制浏览器窗口的。

    使用上讲,window对象不需要创建对象,直接使用即可。

    对象方法

    alert()    //显示带有一段消息和一个确认按钮的警告框
    confirm()  //显示带有一段消息以及确认按钮和取消按钮的对话框。
    prompt()   //显示可提示用户输入的对话框。
    
    open()  //打开一个新的浏览器窗口或查找一个已命名的窗口。
    close() //关闭浏览器窗口。
    
    setInterval()    //按照指定的周期(以毫秒计)来调用函数或计算表达式
    clearInterval()  //取消由setInterval()设置的timeout。
    setTimeout()   //在指定的毫秒数后调用函数或计算表达式
    clearTimeout()  //取消由setTimeout()方法设置的timeout.
    scrollTo()   //把内容滚动到指定的坐标。

    方法使用

    window.open();
    window.alert(123);
    window.confirm(546);
    window.prompt("请输入信息",“hahaha”);
    window.close();
    //======================
    function  foo(){
        console.log("hello!");
    }
    
    var ID = setInterval(foo,2000);//每隔2秒执行一下foo函数,如果不取消就会一直执行下去。
    clearInterval(ID); //取消定时器
    //=======================
    function foo(){
        console.log("hello");
    }
    var ID=setTimeout(foo,2000);
    clearTimeout(ID);

    DOM对象(重点)

    什么时HTML DOM

    HTML  Document Object  Model(文档对象模型)

    HTML DOM 定义了访问操作HTML文档的标准方法

    HTML DOM 把 HTML文档呈现为带有元素,属性和文本的树结构(节点树)

    DOM树

     画DOM树是为了展示文档中各个对象之间的关系,用于对象的导航。

    DOM节点

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

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

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

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

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

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

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

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

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

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

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

    查找标签

    直接查找

    document.getElementById   //根据ID获取一个标签
    document.getElementByClassName    //根据class属性获取
    document.getElementByTagName   //根据标签名获取标签合集

    间接查找

    parentElement    //父节点标签元素
    children      //所有子标签
    firstElementChild   //第一个子标签元素
    lastElementChild   //最后一个子标签元素
    nextElementSibling   //下一个兄弟标签元素
    previousElementSibling  //上一个兄弟标签元素

    节点操作

    创建节点

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

    添加节点

    var imgEle = document.createElement("img");
    imgEle.setAttribute("src","http://image11.m1905.cn/uploadfile/s2010/0205/20100205083613178.jpg");
    //设置属性值
    var d1Ele = document.getElementById("d1");
    d1Ele.appendChild(imgEle); //追加一个子节点(作为最后的子节点)
    
    
    //somenode.insertBefore(newonode,某个节点);  把增加的节点放到某个节点的前面。

    删除节点

    var d1Ele = document.getElementById('d1');//获取父节点
    
    d1Ele.removeChild(imgEle); //通过父元素调用该方法删除imgEle节点

    替换节点

    //语法:
    
    somenode.replaceChild(newnode,某个节点)

    属性节点

    获取文本节点的值:

    var divEle = document.getElementBy("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.setAttribute("age");
    divEle.removeAttribute("age");
    
    //自带的属性还可以直接.属性名来获取和设置
    imgEle.src
    imgEle.src = "..."

    获取值操作

    语法:

      elementNode.value

    适用于以下标签:

      input

      select

      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);

    class的操作

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

    示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .c1{
                height: 400px;
                width: 400px;
                border-radius: 50%;
            }
            .red_cls{
                background-color: red;
            }
            .green_cls{
                background-color: green;
            }
        </style>
    </head>
    <body>
        <div class="c1 red_cls green_cls">
    
        </div>
    
        <script>
            var divEle = document.getElementsByTagName('div')[0];
            function foo(){
                divEle.classList.toggle('green_cls');
            }
            setInterval(foo,1000);
        </script>
    </body>
    </html>
    自动开关灯操作

    指定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

    绑定事件

    常用事件

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

    绑定方式

    方式一:

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

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

    函数定义过程中的this为形参

    方式二:

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

    事件示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
    </head>
    <body>
        <input type="text">
        <button id="i1">开始</button>
        <button id="i2">暂停</button>
        <script>
            var t = null;
            var inputEle = document.getElementsByTagName('input')[0];
            var b1Ele = document.getElementById('i1');
            var b2Ele = document.getElementById('i2');
    
            function showtime() {
                var gettime = new Date();
                inputEle.value = gettime.toLocaleString();
            }
            b1Ele.onclick = function () {
                if (!t){
                    t = setInterval(showtime,1000);
                }
    
            };
            b2Ele.onclick = function () {
                clearInterval(t);
                t = null;
            }
    
        </script>
    
    
    </body>
    </html>
    定时器示例
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
    </head>
    <body>
    <input type="text" value="哈哈"></input>
        <script>
            var inputEle = document.getElementsByTagName('input')[0];
            inputEle.onfocus = function () {
                inputEle.value = ''
            };
            inputEle.onblur = function () {
                inputEle.value = '请输入'
            }
        </script>
    
    
    </body>
    </html>
    搜索框示例
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
    </head>
    <body>
    <select name="" id="i1">
        <option value="">--请选择--</option>
    </select>
    
    
    <select name="" id="i2">
        <option value="">--请选择--</option>
    </select>
    
    <script>
            var se1Ele = document.getElementById('i1');
            var se2Ele = document.getElementById('i2');
            var data = {"河北省": ["廊坊", "邯郸"], "北京": ["朝阳区", "海淀区"], "山东": ["威海市", "烟台市"]};
            for (var i in data){
                var optEle = document.createElement('option');
                optEle.innerText=i;
                optEle.value = i;
                se1Ele.appendChild(optEle);
            }
            se1Ele.onchange = function () {
                var currentPro = se1Ele.value;
                var currentCityList = data[currentPro];
                se2Ele.innerText = '';
                se2Ele.innerHTML = '<option value="">--请选择--</option>';
                for(let i = 0;i<currentCityList.length;i++){
                    var optEle2 = document.createElement('option');
                    optEle2.innerText = currentCityList[i];
                    optEle2.value = currentCityList[i];
                    se2Ele.appendChild(optEle2);
                }
            }
    
    </script>
    </body>
    </html>
    select 省市联动

     

    万般皆下品,唯有读书高!
  • 相关阅读:
    客户机(单线程 和多线程都可以用 主要是看服务器是单线程的还是多线程的)
    获得URl信息
    获取地址
    定时器的使用以及日期的学习
    生产者和消费者
    线程join
    线程的协作
    文件的解压与压缩
    文件的分割与合并
    以各种方式读写文件
  • 原文地址:https://www.cnblogs.com/s686zhou/p/11502866.html
Copyright © 2020-2023  润新知