JS基础DOM二

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();
      };
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • 1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型:Undefined、Nul...
    极乐君阅读 5,512评论 0 106
  • “哥哥,你俩为啥罚站呀?”“( ´^` )因为上课睡觉,那你呢?因为啥?”“( ー̀εー́ )因为上幼儿园不睡觉。...
    唐缘不是汤圆儿阅读 241评论 1 0
  • 文/玛嗒嗒 图/网络 相信很多人最近都被被凶巴巴的陈小春和他儿子Jasper狠狠圈粉。 随着年龄渐长,很少看综艺了...
    玛嗒嗒阅读 2,189评论 16 42
  • 早上六点十分接机的车就到了,本以为到了机场会苦等两小时,结果旅途,拿票,托运,安检,时间被分匹之后,没有那么难耐。...
    冠世墨玉yanzi阅读 370评论 1 3