BOM和DOM

BOM和DOM

BOM(Browser Object Model)是指浏览器对象模型,js操作浏览器
DOM(Document Object Model)是指文档对象模型,js访问HTML文档的所有元素。

BOM
    window对象
        window.innerHeight - 浏览器窗口的内部高度
        window.innerWidth - 浏览器窗口的内部宽度
        window.open() - 打开新窗口
        window.close() - 关闭当前窗口 (只能关闭用js的window.open()打开的页面,了解一下就行了)
        
    location对象
        location.href  获取URL
        location.href="URL" // 跳转到指定页面
        location.reload() 重新加载页面,就是刷新一下页面
        
    
    计时相关
        setTimeout('js语句',毫秒)
        function f(){
            alert('你好');
        };
        
        var t=setTimeout(f,2000);
        
        alert: 你好
        
        clearTimeout(t);/清除
        
        setInterval('js语句',时间间隔)//每个一段事件做一些事情
        
        clearInterval(timer);//清除

 

 

DOM

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

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

 

 

    查找标签
    节点操作(标签)
        创建节点:
            var dive=document.createElement('div');
            
            dive
            <div></div>​
        添加节点
            追加子节点
            var a=document.createElement('a');
            
            dive.appendChild(a);
            <a></a>​

            放到某个节点前面


        删除子节点
            dive.removeChild(a);
            <a></a>​
            
            dive
            <div></div>​
            
        替换子节点
            dive.replaceChild(p,a);
            <a></a>​
            
            dive
            <div><h1></h1></div>​
        
        属性节点
        
            var divEle = document.getElementById("d1")
            divEle.innerText  #输入这个指令,一执行就能获取该标签和内部所有标签的文本内容
            divEle.innerHTML  #获取的是该标签内的所有内容,包括文本和标签
    
            var divEle = document.getElementById("d1")
            divEle.innerText="1"  
            divEle.innerHTML="<p>2</p>" #能识别成一个p标签
    
    属性操作
        var divEle = document.getElementById("d1");
        divEle.setAttribute("age","18")  #比较规范的写法
        divEle.getAttribute("age")
        divEle.removeAttribute("age"
            
    
    获取值操作
        input
        select
        textarea
        
        node.value
        
    class操作
        dive.classList.add('c1');#添加类
        dive
        <div age=​"18" class=​"c1"><a>​123​</a></div>​

        classList.contains(cls)  存在返回true,否则返回false
        classList.toggle(cls)  存在就删除,否则添加,toggle的意思是切换,有了就给你删除,如果没有就给你加一个
    指定CSS操作
        dive.style.marginTop=0;
        0
        dive
        <div age=​"18" class style=​"margin-top:​ 0px;​">​…​</div>

 

事件

 

    事件
    绑定方式
    方式一(不常用)
        <div id="d1" onclick="changeColor(this);">点我</div>  
        <script>  
          function changeColor(ths) {  
            ths.style.backgroundColor="green";
          }
        </script>
        
        注意:

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

      函数定义过程中的ths为形参。
        
    方式二(推荐):一般是将script标签写道body标签的最下面
        <div id="d2">点我</div>
        <script>
          var divEle2 = document.getElementById("d2");
          divEle2.onclick=function () {
           //console.log(this)
            this.innerText="呵呵"; #哪个标签触发的这个事件,this就指向谁
          }
        </script>
    具体一些事件
    
    ***    onclick        当用户点击某个对象时调用的事件句柄。
        ondblclick     当用户双击某个对象时调用的事件句柄。

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

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

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

 

 

 

 

综合练习

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>input时间框</title>
</head>


<body>

<div>
    <input type="text" id="inp">
    <button id="btn1">开始</button>
    <button id="btn2">结束</button>
</div>

<script>
    // 1.点击开始按钮,显示当前时间
    function f() {
        // 0.初始化时间
        var date = new Date();
        current_time = date.toLocaleString();
        console.log(typeof current_time);
        //得到input的标签
        var inpt = document.getElementById('inp');
        //给input标签添加value属性和值
        inpt.setAttribute('value', current_time);
    }

    // 2.时间计时器,一秒一秒的走
    var b1 = document.getElementById('btn1');
    //给btn1增加点击事件
    // 设置为全局变量是为了让btn1   btn2点击的时候都能用该变量
    var tim;
    b1.onclick = function () {
        //第一次tim为undefined,让他在当前时间上循环时间
        if (tim === undefined) {
            // 学会interval的用法
            tim = setInterval(f, 1000);
        }

    };
    // 3.点击结束按钮,结束计时
    var b2 = document.getElementById('btn2');
    b2.onclick = function () {
        //点击b2清除时间
        clearInterval(tim);
        //结束后将tim设置成undefined以便循环使用
        tim = undefined;
    }

</script>
</body>
</html>
input时钟
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>select联动</title>
</head>
<body>

省份:<select name="123" id="province">
    <!--<option value="">&#45;&#45;&#45;&#45;</option>-->
</select>
城市:<select name="123" id="city"></select>

<script>
    data = {"河北省": ["廊坊", "邯郸"], "北京": ["朝阳区", "海淀区"], "山东": ["威海市", "烟台市"]};
    //1.遍历出省份,然后创建op标签,给op标签添加省份,然后在添加到select标签中
    var pro_sel = document.getElementById('province');
    var city = document.getElementById('city');
    for (var one_pro in data) {
        // 1.得到省份one_pro
        var pro_op = document.createElement('option');

        // 2.给标签添加内容
        pro_op.innerText = one_pro;

        // 3.得到select标签,追加一个子节点
        pro_sel.appendChild(pro_op)
    }

    // 2.初识化   打开网页就有城市
    var first_pro = pro_sel.value;
    var fisrt_city = data[first_pro];
    for (var fir_c_index in fisrt_city) {

        fir_name = fisrt_city[fir_c_index];

        var fir_op = document.createElement('option');
        fir_op.innerText = fir_name;

        city.appendChild(fir_op);

    }

    // 3.联动城市
    pro_sel.onchange = function () {
        // 得到的是所选省份的索引
        // console.log(this.selectedIndex);
        //options[索引]得到的是option标签,innerHTML得到是该option标签的值
        // console.log(this.options[2].innerHTML);


        //只要变,得到的是每一个省份的值
        console.log(pro_sel.value);
        // 通过数据里面的键得到城市数组
        var city_arr = data[pro_sel.value];
        console.log(city_arr);

        // 每次改变的时候都要清空里面的标签
        city.innerHTML = '';

        // 遍历所得到的城市数组,得到的是索引
        for (var city_index in city_arr) {
            console.log(city_index);
            //通过索引找到城市数组的名字
            city_name = city_arr[city_index];
            // 1.创建option标签,给op标签添加内容,在添加到夫标签select标签中
            var city_op = document.createElement('option');

            city_op.innerText = city_name;

            city.appendChild(city_op);


        }

    }

</script>


</body>
</html>
select联动
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>搜索框示例</title>

</head>
<body>
<script>
function focus1(){  //如果在标签中写的blur()等方法,没有传入this参数,那么我们就需要自己来获取一下这个标签,例如下面的getElementById('d1')
    var inputEle=document.getElementById("d1");
    console.log(1111);
    if (inputEle.value==="请输入关键字"){
        inputEle.value="";
     //inputEle.setAttribute('value','')
    }
}

function blur1(){
    console.log(1111);
    var inputEle=document.getElementById("d1");
    var val=inputEle.value;
    if(!val.trim()){
        inputEle.value="请输入关键字";
    }
}
</script>
    <input id="d1" type="text" value="请输入关键字" onblur="blur1()"  onfocus="focus1()"/>
<input type="submit" onclick=blur1()>

</body>
</html>
搜索框

 

posted @ 2019-03-19 17:34  烧刘病  阅读(129)  评论(0编辑  收藏  举报
回到页首