DOM & 事件

前言
 之前讲都是js的纯基本语法,表达式啥的,跟浏览器无关,可以使用node和控制台执行;
 往后讲的只有浏览器里才会有。
HTML的加载顺序
  • 从上到下,从外到里依次加载
  • js的三种引入方式
    1. 内联<script>
    2. 行内属性上写
    3. 外链.js文件
      总之
      <script>标签内,属性值中,.js文件里直接写js代码。
      你告诉js内存,要做某个事,
      DOM响应到有这个事情发生,把结果映射到浏览器让我们看到
      及时响应
      如果改了颜色背景,都需要css渲染,渲染过程可以忽略不计。
      main.style.color = ["red","blue"][Math.random()2 | 0]
      Math.random()表示0到1之间的随机小数,不包括0和1
      Math.random()
      2 | 0 表示0或者1
DOM API学习
DOM结构的操作
  1. 对象引用,相当于拉了个线,
    === 对象类型等完全一样,如果不是基础类型(字符串,数字),那就是同一个东西,修改一个另一个也会修改。
  2. 集合不是数组,但类数组。
    document.all[0] 是按照加载顺序取的,从上到下,从外到里依次加载
    document.getElemntBy系列
    document.referrer 从哪里来的URL,返回""或者url字符串
    document.lastModified 最后修改时间

![Uploading 1-sibling_578152.jpg . . .]
document.domain 当前url的域名,可以被修改,
但是只允许从二级修改到顶级域名(XXX.com, XX.cn, XXX.com.cn)

  • frame操作不能跨域,可以修改到顶级域,名假装同域名进行操作,

  • 但是如果当前页,面有关联太多,比如登录请求,都会发到顶级上,非常局限。

  • 并且css和js必须使用绝对路径,不然(相对路径)都会访问顶级上。副作用很大。
    document.cookie,返回一个字符串,例如 "M9xo_2132_lastvisit=1437095802;BAIDU_DUP_lcr=https://www.baidu.com/;pgv_pvi=1186400050; __utmc=14869410;username=wsc"
    cookie 是唯一可以服务端和客户端同时操作的东西,
    比如一个请求发到服务端,服务端修改完告诉浏览器你也该改了。
    同时用脚本也可以修改。
    https://github.com/shy2850/xhcms_2014/blob/master/js/module/cookie.js
    要精确的对 cookie 进行读取其实很简单,就是对字符串进行操作

    js全局对象

    1. escape(string)可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。
      返回: 已编码的string 的副本。
      其中某些字符被替换成了十六进制的转义序列。
    2. stringObject.indexOf(searchvalue,fromindex)
      可返回某个指定的字符串值在字符串对象中首次出现的位置。
      fromindex规定开始检索的位置。它的合法取值是0到 stringObject.length - 1
      如省略该参数,则将从字符串的首字符开始检索。
    3. toGMTString() 可根据格林威治时间 (GMT) 把 Date 对象转换为字符串,并返回结果。

HTML DOM Element 对象

注意
HTML 是对XML的扩展,但是不全,所以有时候要查XML DOM参考手册文档

  1. .nextElementSibling IE6不支持,但有.nextSibling跟前者等价。例,需要用.nextSibling写兼容【大坑】
  2. 如果前者是肯定意义直接返回前者,否则就返回后者。如此逻辑可以使用下面的方式:return a || b //结果是精确的值,不是true、false,或运算的短路逻辑
    var a=1,b=2; a || b //1
    var a=0,b=2; a || b //2
    var a=null,b=2; a || b //2
  3. 在父的最前和最末位置分别插入
    parentNode.appendChild(newNode)
    parentNode.insertBefore(newNode,parentNode.childNodes[0])//不用children(不包含空白的text节点)
    after是有IE6兼容性问题的
    removeNode //移除节点
    cloneNode //复制节点
  4. 元素属性和css的操作
    • case 表达式 原因?
    • class操作
      css操作,提倡修改class来修改样式
      做一个忽闪忽闪的东西,可以锻炼思维
      通过以下方式修改所有的css样式
      main.style .backgroundColor = "red";
      dom.style[name] = value;//name是变量时,就不能再【点】了
      修改容易,获取.css样式表里的样式难:
      getComputedStyle(main)[backgroundColor]
      所以尽量不取.css里的样式进行对比。

25ke 1:08

事件,事件绑定的兼容见图片
  • 事件绑定,比较复杂,杂乱。先选中,再绑定事件
    1. 行内属性赋值的方式
      选中再赋值,只能赋值一次,也就是只能添加一个事件

    2. 但是选中添加监听,可以绑定多个事件,不会修改或者覆盖,只会附加更多事件
      mouseenter,是先离开再进入的时候,跟mouseleave相对
      而mouseout ,是在其子元素上也会触发,。。。?
      dblclick 双击。
      mouseenter等这些IE6都不支持,因为不支持addEventListen(),要用attachEvent

    3. 标准的this就是dom标签,非标准的则不是,需要处理一下,把this替换过来
      在内部新创建个方法,执行的时候,把方法执行的主对像硬修改成dom,在dom上执行
      listener.call(dom,event)//event 继续传递下去
      等价于dom.listener()

    4. 事件很混乱的时候,去掉一个,在对比,在修改。

    5. 新建的临时的变量就是前端的缓存方法。

事件代理

  1. 为啥阻止冒泡?如何阻止
    点击子不连带着触发父绑定的事件方法-阻止冒泡,而IE6下不用阻止冒泡
    停止事件传播:e.stopPropagation()

  2. 为啥绑定到父上?
    考虑性能消耗,如何一次绑定完全?还是要绑定上父上面
    target 是真正被点击的子标签非标准的则不是,log一下target,,怎么全删了?remove和removeChild的区别
    e.target || e.srcElement 分别代表(标准和IE浏览器)
    25ke 01:53

  3. 只是不从父main往上冒泡了,但是还会从子冒泡到他本身?

  4. 事件怎么全解绑了?
    移除只能一个个移除,首先把事件函数缓存起来。
    用for循环移除所有事件。没有统一的移除方法。

事件绑定原则

能只绑一遍,就不绑多遍,一次绑定,事件很金贵的

css小节
  1. 绝对定位的层级会较普通的高,但是使用relative的更高。可以用z-index调整
  2. 行内标签有float的可以设置宽高,总之脱离文档流的,都可以设置宽高
  3. 尽量使用百分比。
  4. 想对谁定位,要写,不然就是相对应body,
  5. 而且IE必须主动指定left:0;top:0;
  6. overflow:hidden;或者line-height:0;
  7. 把元素的所有style属性都改成默认的,方法:inner.style.cssText = "";但是IE就不支持
  8. 样式表里要杜绝写id

25ke 02:16
星级评分自己动手写。
模拟下拉框
事件绑定和选取是最常用的功能,写的多了就是在写jquery这样的框架
少使用鼠标,多用键盘

26ke 25min

   Q.create("div",{})?select.js
   对象.getAttribute("")//获取所有属性:id type class name
   或者对象.selected
   必须是表单元素,才能直接.value,.selceted;
   否则必须用.getAttribute("value")
   .tagName.toUpCase() === 'A'//因为会自己解析出来就转成大写,所以才。。
   ie6 不支持dispaly:block
   ie6 下 option 是大写

总结

ctrl+d对网友收藏
云香水识的简书
云香水识的runjs.cn
d3.js
webGL

表单操作
27-10min

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

推荐阅读更多精彩内容

  • 问答 一、dom对象的innerText和innerHTML有什么区别? innerTextinnerText是一...
    婷楼沐熙阅读 398评论 0 0
  • 问答 1.说说库和框架的区别? 类库(Class Library):类库就是一些类的集合,只要我们将一些可以复用的...
    鸿鹄飞天阅读 261评论 0 1
  • 1.dom对象的innerText和innerHTML有什么区别? innerText是一个可写属性。将写入的内容...
    candy252324阅读 527评论 0 0
  • 酒过三巡 听着你们说过的名词 沿着记忆 追溯每一段经历的故事 耐人寻味 只可惜 我怎么努力 都回想不起 那些本不该...
    慕星读者OR独者阅读 235评论 0 2
  • 熊市股票, 1,防御性股票:白酒,医药,黄金,贵金属。 ?消费类,高速公路, ……………………………… 国际油价,...
    王红刚阅读 152评论 0 0