美文网首页
JS基础DOM二

JS基础DOM二

作者: 简简简简简书 | 来源:发表于2017-05-23 10:02 被阅读15次

    style属性

    
        <style type="text/css">
            .box{
                position: absolute;
                z-index: 1;/*元素层级,只能在绝对定位元素上生效*/
            }
        </style>
        <script>
        var  box = document.getElementsByClassName("box")[0];
    
        //style只能和行内样式进行交互,命名规则是驼峰,值都是字符串
        document.getElementsByTagName("button")[0].onclick = function () {
          box.style.backgroundColor = (box.style.backgroundColor === "red" ? "rebeccapurple" : "red");
        };
        //cssText:字符串形式的样式,把行内样式按照字符串输出
        console.log(box.style.cssText);//"width: 100px;background-color: rebeccapurple; height: 100px;"
        //设置
        box.style.cssText = "width: 100px;background-color: rebeccapurple; height: 100px;"
        </script>
    

    DOM元素的创建方式总结

    第一种创建方式,document.write,可以识别标签,在script中写html和css,跟script写的位置有关系。script写哪就创建在哪,不常用,容易覆盖原来的页面

    document.write("<li>我是document.write创建的</li>");
    

    第二种innerHTML,也可以识别标签,用的比较多,绑定属性和内容比较方便,节点嵌套创建用它比较方便

      var li3 = document.getElementsByTagName("li")[0];
      li3.innerHTML += "<li>我是innerHTML创建的</li>";
    

    第三种:利用domAPI创建元素,也是用的比较多的,创建指定数量的时候一般用它

      var li4 = document.createElement("li");
      li4.innerHTML = "我是createElement创建出来的";
      //在父元素的最后添加
      li3.appendChild(li4);
      //指定位置添加
      var li5 = li4.cloneNode(false);
      li5.innerHTML = "我是cloneNode创建出来的"
      li3.insertBefore(li5,li4);//插入到哪个元素的前面
    

    window对象

    window是BOM的顶级对象,通常情况下可以省略

        window.alert("11");
        window.prompt("111");
        
        //成员变量也是window的属性
        var  aa = "1";
        console.log(aa === window.aa);
    
        //自定义函数也是window的一个方法
        function aaa() {
          console.log("111");
        }
        window.aaa();
    

    open,close

        //window.open(地址,是否开新窗口,新窗口参数)
        var a1 = document.getElementsByTagName("a")[0];
        var a2 = document.getElementsByTagName("a")[1];
        a1.onclick = function () {
          var json = {"name":"helloworld","fullscreen":"no","location":"no","width":"100px","height":"100px","top":"100px","left":"100px"};
          window.open("http://www.jd.com","_self",json);
    
    //        featurse:属性控制字符串,在此控制窗口的各种属性,属性之间以逗号隔开。
    //        fullscreen= { yes/no/1/0 } 是否全屏,默认no
    //        channelmode= { yes/no/1/0 } 是否显示频道栏,默认no
    //        toolbar= { yes/no/1/0 } 是否显示工具条,默认no
    //        location= { yes/no/1/0 } 是否显示地址栏,默认no
    //        directories = { yes/no/1/0 } 是否显示转向按钮,默认no
    //        status= { yes/no/1/0 } 是否显示窗口状态条,默认no
    //        menubar= { yes/no/1/0 } 是否显示菜单,默认no
    //        scrollbars= { yes/no/1/0 } 是否显示滚动条,默认yes
    //        resizable= { yes/no/1/0 } 是否窗口可调整大小,默认no
    //        width=number 窗口宽度(像素单位)
    //        height=number 窗口高度(像素单位)
    //        top=number 窗口离屏幕顶部距离(像素单位)
    //        left=number 窗口离屏幕左边距离(像素单位)
        }
        //window.close关闭当前页面
        a2.onclick = function () {
          window.close();
        }
    

    location

        //location,做页面跳转
        var div = document.getElementsByTagName("div")[0];
        div.onclick = function () {
          location.href = "https://www.baidu.com";
        }
    
    //    console.log(location.href    )    //
    //    console.log(location.hash    )    //    返回url中#后面的内容,包含#
    //    console.log(location.host    )    // 主机名,包括端口
    //    console.log(location.hostname)    // 主机名
    //    console.log(location.pathname)    // url中的路径部分
    //    console.log(location.protocol)    // 协议 一般是http、https
    //    console.log(location.search   )     // 查询字符串
    

    navigator

        //navigator
        console.log(navigator.userAgent);//浏览器支持的系统
        console.log(navigator.platform);//系统
    

    history

        //history,历史记录管理
        history.go(1);//前进   history.forwardo()也是前进
        history.go(-1);//后退  history.back()也是回退
        history.go(0);//刷新
    

    定时器

    setInterval,循环定时器,周而复始的执行
    setTimeout,炸弹定时器,用完以后立即报废,只执行一次

    定义方法

        var a = 0;
        //定义方法1匿名函数,一般情况下都用这个
        setInterval(function () {
          console.log(a++);
        },1000);
    
        //定义方法2函数名
        setInterval(aaa,1000);
        function aaa() {
          console.log(1);
        }
    
        //定义方法3
        setInterval("sss(111)",1000);
        function sss(ssss) {
          console.log(ssss);
        }
    

    销毁定时器

        //setInterval的返回值就是定时器的名字
        var num = 1;
        var timer = null;
        time = setInterval(function () {
          console.log(num++);
          if (num > 10) {
            clearInterval(timer);
          }
        },500);
    

    绑定事件的第二种方法

    第一种绑定事件的方法,当事件被重复绑定的时候,会被覆盖掉

        var  button = document.getElementsByTagName("button")[0];
    
        //onclick事件绑定会被覆盖掉
        button.onclick = function () {
          console.log("12345");
        }
        button.onclick = function () {
          console.log("67890");
        }
    

    事件绑定第二种方法:事件监听器,原事件被执行的时候,后面的事件照样被执行,不会被覆盖(更适合团队开发)

        //1.事件源去调用
        //2.参数1是不带on的触发事件
        //3.参数2是事件名(执行函数)
        //4.参数3是事件名(捕获或者冒泡)
    
        button.addEventListener("click",fn1);
        button.addEventListener("click",fn2);
        button.addEventListener("click",fn3);
        function fn1() {
          console.log("12345");
        }
        function fn2()  {
          console.log("67890");
        }
        function fn3()  {
          console.log("123456789");
        }
    

    addEventListener实现原理

      /**
         *
         * @param type 事件名
         * @param fn 执行函数
         * @param element 给哪个元素绑定
         */
        function customAddEventListener(type,fn,element) {
    
          var str = "on" + type;
          //执行方法的时候就先判断事件是否被绑定完,然后在去绑定,就能判断之前的事件是否被绑定过
          var oldEvent = element[str];
          element[str] = function () {
            //不能直接调用,因为还不知道这个元素之前还有没有绑定同样的事件
            //进行判断,如果有就先把之前的执行完再执行,如果没有接直接执行
            //如果没有被定义过事件该事件源的该事件属性应该是null对应的boolean值是false
            //如果已经定义过事件该事件源的该事件属性应该是function本身对应的boolean值是true
            if (oldEvent) {
                oldEvent();
            }
            fn();
          };
        }
    

    相关文章

      网友评论

          本文标题:JS基础DOM二

          本文链接:https://www.haomeiwen.com/subject/cfywxxtx.html