html
什么是语义化的HTML?
- 选择合适的标签。搜索引擎的爬虫也依赖于标记来确定上下文和各个关键字的权重。这对搜索引擎的抓取有好处。
- 符合内容的结构化:在没有CSS的情况下,让页面展现出清晰地结构。
- 有利于开发和维护:能够使阅读源代码的人更容易明白网页的结构。
说下行内元素和块级元素的区别?行内块元素的兼容性使用?(IE8 以下)
行内元素特性:
- 和相邻的内联元素在同一行
- 宽度、高度,padding-top/bottom、margin-top/bottom都不可设置
块级元素特性:
- 总是独占一行
- 宽度,高度,内边距,外边距都可以设置
div { display: inline-block;//先用display:inline-block属性触发块元素 *zoom: 1;//通过zoom:1触发块元素的layout *display: inline;//让块元素呈x现为内联对象 }
XHTML和HTML有什么区别
XHTML是更严格的HTML标准,主要表现在:XHTML元素必须正确的嵌套和关闭,标签名必须用小写字母,文档必须要有根元素
前端页面有哪三层构成,分别是什么?作用是什么?
- 结构层:主要指DOM节点,html
- 表现层:主要指页面渲染,css
- 行为层:主要指页面的动画效果,js
Doctype作用?标准模式与兼容模式各有什么区别?
- Doctype在文档的第一行,处于html标签之前。告诉我们的浏览器用什么文档标准来解析文档。Doctype不存在或格式不正确会导致文档以兼容模式呈现。
- 标准模式:标准模式下的排版和js的运作模式都是按照该浏览器支持的最高标准来执行的。
- 兼容模式下,页面以宽松的,向后兼容的方式显示,模拟老式浏览器的行为以防站点无法工作。
你知道多少种Doctype文档类型?
对于标准模式,有严格型。对于准标准模式,有过渡型,框架集型。这两种模式的差异几乎可以忽略不计。
HTML5 为什么只需要写 ?
HTML5不基于SGML(标准通用标记语言)的子集,因此不需要对DTD(文档类型定义规则)进行引用。但是需要Doctype来规范浏览器的行为。
html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和
HTML5?
新特性:
- 语义化更好的标签:header,footer,nav,aside,article,section
- 对本地离线存储更好的支持:localStorage长期存储数据,浏览器关闭后数据不丢失。sessionStorage浏览器关闭后自动删除。
- 画布canvas,音频audio,视频video,地理Geolocation
- 新的表单控件:calendar,date,time,email,URL,search
- 新的表单元素:atalist 元素规定输入域的选项列表。 keygen 元素的作用是提供一种验证用户的可靠方法。 output 元素用于不同类型的输出
- webworker:当前javascript的主线程中,使用Worker类加载一个javascript文件来开辟一个新的线程,起到互不阻塞执行的效果,并且提供主线程和新线程之间数据交换的接口:postMessage,onmessage。
- JavaScript是单线程的,在执行过程中会阻塞页面的渲染和其他脚本的执行。因此webworker可以在主线程当中开启一个新的线程,起到互不阻塞执行的效果。通过 worker = new Worker( url ) 加载一个JS文件来创建一个worker,同时返回一个worker实例。通过worker.postMessage( data ) 方法来向worker发送数据。绑定worker.onmessage方法来接收worker发送过来的数据。
- websocket:webscoket是HTML5提供的传输协议。它可以将服务器的更新及时主动的发给客户端
移除了纯表现的元素:big,center,font,strike等等。对可用性产生负面影响的元素:frame,frameset,noframes;
浏览器兼容问题:IE8/IE7/IE6支持通过document.createElement方法产生的标签,可以利用这一特性让这些浏览器支持HTML5新标签。当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
如何区分:DOCTYPE声明\新增的结构元素\功能元素
iframe的优缺点?
优点:
- 解决加载缓慢的第三方内容如图标和广告等的加载问题
- Security sandbox
- 并行加载脚本
缺点:
- iframe会阻塞主页面的Onload事件;
- 即时内容为空,加载也需要时间
- 没有语意
div+css的布局较table布局有什么优点?
- 改版的时候更方便 只要改css文件。
- 页面加载速度更快、结构化清晰、页面显示简洁。
- 表现与结构相分离。
- 易于优化(seo)搜索引擎更友好,排名更容易靠前。
文档编码格式
http-equivcontent-type值可以设计文档的编码格式。把 content 属性关联到 HTTP 头部。
CSS
页面导入样式时,使用link和@import有什么区别?
- 就标签的分类来说,link属于HTML标签,而@import是CSS提供的。而且link的权重大于@import。
- 加载顺序来说,link引用的css文件,页面载入的时候同时加载。而@import是等到页面加载完成后再加载。
- 兼容性来说,link没有兼容性问题,@import在IE5以上才可识别
- 使用DOM控制样式时,link支持js操作DOM改变样式。@import不行。
CSS放在顶部/底部有什么区别
- CSS放在顶部时,页面会逐步呈现出来。因为浏览器在页面载入的时候同时加载css。浏览器会根据html生成DOM树,根据css生成渲染树。
- 但是放在底部页面会出现白屏或者闪跳的情况。因为放在底部时,css是等页面下载完后再被下载。浏览器为了弥补样式比较靠后的加载,为了逐步呈现从而延迟呈现,因此出现白屏的情况。
什么是 FOUC(无样式内容闪烁)?你如何来避免 FOUC?
就是@import引起的。@import是等到页面加载完成后再加载。因此会出现闪烁的感觉。解决办法是link引用css文件
简要说一下CSS的元素分类
块级元素:div p ul ol li form
行内元素:span a input img strong em label
CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有那些?以及这些选择器的使用场景?
选择器:(按优先级)
- 通配符* (*, > ,+ 选择器的权重都是0)
- id选择器 #myid (权重100)
- class选择器 .class (10)
- 属性选择器 input[type="button"](10)
- 伪类选择器 a:link a:visited a:hover a:visited(10)
- 标签选择器 p div (1)
- 伪元素选择器 a:before a:after :first-child(1)
- 相邻+,子>,后代选择器
优先级算法:同权重下以最近者为准
!important>行内样式(权重1000)>id选择器(权重100)>id选择器 |属性选择器|伪类选择器 (权重10)>标签选择器|伪元素选择器(权重1)
可继承的样式:font的样式,color,visiblity
不可继承的:关于盒模型的:width height margin padding border
新增伪类:first-child last-child nth-child(n)
CSS选择器,nth-chlid(n)和nth-of-type(n)区别
ele:nth-of-type(n)是指父元素下第n个ele元素, 而ele:nth-child(n)是指父元素下第n个元素且这个元素为ele,若不是,则选择失败
介绍一下CSS的盒子模型?
W3C标准盒模型:content,padding,border,margin。其中width指的是内容content的宽度
IE盒模型:content,padding,border,margin。其中width指的是content的宽度+padding+border的宽度
box-sizing常用的属性有哪些?分别有什么作用?
是CSS3中提供的属性。主要控制盒模型的解析方式。每种盒模型计算元素宽高的方式不同:
- 它的默认值是content-box,也就是width的宽度指的是内容content的宽度。是W3C标准盒模型。
- border-box的width是content+padding+border。也就是IE盒模型
- 还有padding-box:width指的是content+padding的宽度。
display的值:
规定元素生成框的类型:
- block:块类型元素
- inline:行内元素
- inline-block:行内块级元素
- list-item:块类型元素,并添加样式列表标记
- none:元素脱离文档流,不会显示
display:none与visibility:hidden的区别是什么?
他们都可以隐藏对应的元素。
- display:none:使元素脱离文档流,不占用空间。其他元素会靠拢,就当他不存在一样。
- visibility:hidden:不会脱离文档流。
position的值, relative和absolute分别是相对于谁进行定位的?
- relative:相对于其在普通流中的位置定位
- absolute:相对于离其最近的已定位的父元素定位,如果没有就相对于窗口。
- fixed:相对于浏览器窗口定位。
- static:元素在正常流当中,并且忽略其top,bottom,left,right值
- inherit:从父元素继承position的值
为什么要初始化CSS样式?
因为浏览器的兼容问题,不同浏览器对某些标签的默认值不同。如果没有初始化,会导致页面在不同浏览器中存在差异。
垂直居中设置(已知大小和未知大小,图片)多行文本居中
已知大小:
块元素:绝对定位后margin左上都设置为负的1/2宽高。
.center{ position: absolute; width: 200px; height: 200px; left:50%; top:50; margin-top:-100px; margin-left: -100px; }
文本:将文本text-align:center;line-height设置为父容器的高;
.text{ height:100px; text-align: center; line-height: 100px; }
多行文本居中:width,height必须使用px单位,再配合vertial-align:middle和display:table-cell属性,且div不能浮动,如果浮动就在里面再添加一个div
.parent{ display: table-cell; vertical-align: middle; }
未知大小元素居中:
方法一:使用CSS3的flex-box
.wrap { display: flex; align-items: center; justify-content: center; }
方法2:父元素相对定位,子元素绝对定位,左右为50%,再使用transform:translate上下移动自身的-50%;
.parent{ position: relative; } .child{ position: absolute; left: 50%; top: 50%; -webkit-transform: translate(-50%,-50%); }
方法4:给子元素加上table标签,让table的margin:0 auto;height:100%;
<table style="margin: 0 auto;height: 100%;"> <tbody> <tr> <td> <ul > <li>8888888888li> <li>8888888888li> <li>8888888888li> <li>8888888888li> <li>8888888888li> ul> td> tr> tbody> table>
居中图片:
.parent{ display:table-cell; vertical-align:middle; text-align:center; }
浮动原理,浮动产生的问题,CSS清除浮动的几种方法(至少两种)
浮动的元素脱离文档流,不占用空间。可以向左和向右浮动,直到它的外边缘碰到包含框或者另外一个浮动框的边缘为止。
浮动产生的问题:
- 因为浮动的元素脱离文档流,同级非浮动的元素会表现的他不存在一样。
- 如果父元素没有设置宽高,其子元素都浮动的话,会导致父元素的高度无法撑开。影响与父元素同级的元素。
解决办法:
- 同级的元素被覆盖,可以浮动同级元素,但是不推荐这种做法,因为后面的布局会受到影响。也可以给非浮动元素添加clear:both;
- 可以在浮动元素的后面加上空标签清除浮动
- 可以给父元素添加一个after伪元素。也可以让父元素overflow:hidden/auto;*zoom:1;
CSS隐藏元素的几种方法(至少说出三种)
- display:none;不占用空间
- height:0;overflow:hidden
- visibility:hidden;占用空间,不影响点击事件
- opacity:0;
,和,标签
- strong:逻辑标记,粗体强调标签表示内容的重要性
- em:斜体强调标签,更强烈强调,表示内容的强调点
- b:物理标记,只是单纯的加粗
- i:物理标记,单纯的斜体
img的alt与title有何异同?
- alt:用于图片的替代文字,当不能显示图片时显示。
- title:用于提供元素的信息,鼠标悬停时显示(在IE浏览器下会在没有title时显示alt)
px,em的区别
它们都是长度单位,px的值是固定的,指定多少就是多少,em的值是不固定的,他会继承父级元素的大小。浏览器默认字体高都是16排序,所以未经调整的话1em=16px;
怎么实现三角形?
宽高设为0,border设置很大的宽度,再根据所需要的三角形方向设置border-left/right等。
#triangle-left { width: 0px; height: 0px; border: 100px solid transparent; border-right: 100px solid red; }
怎么实现一个圆形可点区域?
1.border-radius设置成50%;
.circle { width: 100px; height: 100px; border-radius: 50%; cursor: pointer; }
2.map+area
<img src="t.jpg" width="1366" height="768" border="0" usemap="#Map" /> <map name="Map" id="Map"> <area shape="circle" coords="821,289,68" href="www.baidu.com" target="_blank" /> map>
表示设定热点的形状为圆形,圆心坐标为(X1,y1),半径为r。
3.JS实现,获取鼠标点击位置坐标,判断其到圆点的距离是否不大于圆的半径,来判断点击位置是否在圆内
document.onclick = function(e) { var r = 50; var x1 = 100; var y1 = 100; var x2= e.clientX; var y2= e.clientY; var distance = Math.abs(Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2))); if (distance <= 50) alert("Yes!"); }
css一个冒号和两个冒号区别?
一个冒号用于CSS伪类,两个冒号用于CSS伪元素。它是CSS3中引入的,为了区分伪类和伪元素。为了兼容IE,还是用一个比较好。
两栏分布,左边定宽右边自适应。
左侧固定宽度,让他绝对定位。右侧margin-left设为左侧宽度
.left{ width:200px; height: 800px; position: absolute; left:0; top:0; } .right{ height: 800px; margin-left: 200px; background-color: green; }
三栏分布
左侧右侧固定宽度并且绝对定位。中间设置marginleft和right。
.left{ width: 200px; position: absolute; left: 0; top: 0; height: 800px; } .right{ width: 300px; position: absolute; right: 0; top: 0; height: 800px; } .main{ /* position: absolute; left: 200px; right: 300px; */ margin-left: 200px; margin-right: 300px; }
css hack原理和分类,利弊
原理:由于不同的浏览器和浏览器各版本对CSS的支持及解析结果不一样,以及CSS优先级对浏览器展现效果的影响,我们可以据此针对不同的浏览器情景来应用不同的CSS。
分类:
- CSS属性前缀法 :IE6能识别下划线"_"和星号" * ",IE7能识别星号" * ",IE6~IE10都认识"\9",但firefox前述三个都不能认识
- 选择器前缀法:IE6能识别*html .class{},IE7能识别*+html .class{}或者*:first-child+html .class{}
- IE条件注释法(即HTML头部引用if IE)针对所有IE(注:IE10+已经不再支持条件注释): ,针对IE6及以下版本: 。这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效。
利弊:使用hack虽然对页面表现的一致性有好处,但过多的滥用会造成html文档混乱不堪,增加管理和维护的负担。
浏览器前缀
现在写css3代码的时候,为了实现兼容性,需要在前面加前缀以便兼容对应的浏览器。
-webkit //Webkit 谷歌和Safari浏览器 -moz //Gecko内核,火狐浏览器 -o //Presto内核,Opera浏览器 -ms //Trident内核,IE浏览器
什么是Css Hack?ie6,7,8的hack分别是什么?
对不同的浏览器写不同的CSS的过程,就是CSS hack
background-color:red\9; /*all ie*/ background-color:yellow\0; /*ie8*/ +background-color:pink; /*ie7*/ _background-color:orange; /*ie6*/
解释下 CSS sprites,以及你要如何在页面或网站中使用它。
把网页中一些背景图片整合到一张图片文件中。利用CSS的background-image,background-position组合进行定位。减少HTTP请求次数。
对BFC规范的理解?
块级格式化上下文,是CSS2.1提出的一个概念:它决定了元素如何对其内容进行布局,以及和其他元素的关系和相互作用。一个创建了BFC的盒子是独立布局的,盒子里面的元素的样式不会影响到外面的元素。
Css渲染机制
在网页中的应该使用奇数还是偶数的字体?为什么呢?
- 偶数字号相对更容易和 web 设计的其他部分构成比例关系
- 为了迁就ie6,ie6会把定义为13px的字渲染成14px
- 偶数宽的汉字显得均衡
iconfont矢量图标优点和缺点
Iconfont 就是指用字体文件取代图片文件,来展示图标、特殊字体等元素的一种方法。
优点:
- 加载文件体积小。
- 可以直接通过css的font-size,color修改它的大小和颜色,对于需要缩放多个尺寸的图标,是个很好的解决方案。
- 支持一些css3对文字的效果,例如:阴影、旋转、透明度。
- 兼容低版本浏览器。
缺点:
- 矢量图只能是纯色的。
- 制作门槛高,耗时长,维护成本也很高。
知道的网页制作会用到的图片格式有哪些?
- png-8,png-24,jpeg,gif,svg,Webp,Apng
- Webp:谷歌开发的为了加快图片下载速度的图片格式。它的图片大小只有JPEG的2/3.
- Apng:可以实现png格式的动态图片效果
canvas为什么会出现,用来做什么的;
canvas 元素使用 JavaScript 在网页上绘制图像,适合像素处理,动态渲染和大数据量绘制
简述一下src与href的区别。
- src用于替换当前元素,指向外部资源的位置,指向的内容会嵌入到文档当中,它会阻塞其他资源的下载。直到该资源下载执行完毕。比如js脚本,image图片等
- href指向网络资源所在的位置,它会并行下载资源并且不会停止对当前文档的处理,比如link方式引入css文件。
什么是外边距重叠?重叠的结果是什么?
CSS中相邻两个盒子的外边距会结合成一个单独的外边距,这种合并的方式称为折叠。两个浮动的块元素不存在margin折叠的情况
折叠结果遵循以下原则:
- 两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值
- 两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值
- 两个外边距一正一负时,折叠结果是两者的相加的和
两个块状元素上下的margin-top和margin-bottom会重叠。啥原因?怎么解决?
CSS中相邻两个盒子的外边距会结合成一个单独的外边距,这种合并的方式称为折叠。
而对于标准浏览器来说:两个浮动的块元素不存在margin折叠的情况,但是此时加浮动后会造成IE6的双边距bug,可以让其设置为_diplay:inline;
rgba()和opacity的透明效果有什么不同?
都能实现透明效果。opacity会作用于元素的背景和内容,rgba只会作用于背景。
关于letter-spacing的妙用知道有哪些么?
以用于消除inline-block元素间的换行符空格间隙问题。
Sass、LESS是什么?大家为什么要使用他们?
他们是CSS预处理器,他们是一种特殊的语法/语言编译成CSS。例如LESS是一种动态样式语言. 将CSS赋予了动态语言的特性,如变量,继承,运算, 函数. LESS 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可一在服务端运行 (借助 Node.js)
为什么要使用它们?
- 结构清晰,便于扩展。
- 可以方便地屏蔽浏览器私有语法差异。
- 可以轻松实现多重继承。
- 完全兼容 CSS 代码,可以方便地应用到老项目中。
知道css有个content属性吗?有什么作用?有什么应用?
用在before和after伪元素上,用来插入生成内容。
最常见的应用就是清除浮动:
.parent:after{ content:'.'; height:0; visiblity:hidden; display:block; clear:both; *zoom:1; // for IE6 }
去除inline-block间隙的方法
- 去除标签内的空格和换行符(代码可读性变差,中间可以加注释分开)
- inline-clock的元素设一个负的margin值:3px;margin负值的大小与上下文的字体和文字大小相关
- 父元素设置font-size:0;-webkit-text-size-adjust:none;
- 使用letter-spacing字符间距:父元素letter-spacing: -3px;inline-clock的元素设letter-spacing: 0px;
- 使用word-spacing单词间距:父元素word-spacing: -6px;inline-clock的元素设letter-spacing: 0px;word-spacing的负值只要大到一定程度,其兼容性上的差异就可以被忽略
媒体查询
使用@media可以针对不同的媒体类型或者不同屏幕大小来定义不同的样式
@media screen and/not/only (min-width:365px,max-width:667px;)//iphone6 @media screen and/not/only (min-width:768px,max-width:1024px;)//ipad @media screen and/not/only (min-width:1024px)//sm-screen
Css实现动画效果Animation还有哪些其他属性。
CSS3动画的属性主要分为三类:
transform
- 元素顺时针旋转的角度rotate
- 设置元素放大或缩小的倍数scale
- 设置元素的位移translate
- 设置元素倾斜的角度skew
transition过渡:可以在不使用 Flash 动画或 JavaScript 的情况下,当元素从一种样式变换为另一种样式时为元素添加效果。
animation:@keyframes 规则用于创建动画。在 @keyframes 中规定某项 CSS 样式,就能创建由当前样式逐渐改为新样式的动画效果
怎么在页面里放置一个很简单的图标,不能用img和background-img
canvas,icon库
谈一谈flexbox,讲一讲哪些浏览器已经支持。
弹性布局。把复杂的网站布局变得简易和快速。
如果我们把Flexbox新语法、旧语法混合在一起使用,在现代浏览器(Chrome、Firefox、Safari、Opera Presto 12.1+,IE10+,IOS和Android)可以得到很好的支持。在这里新旧语法的顺序显得非常重要。需要确保老语法不要覆盖新语法。写的时候对于不同的浏览器加上不同的前缀。
任何一个容器都可以指定为Flex布局,它有如下属性(主轴排列方向flex-direction,是否换行flex-wrap,主轴对齐方式justify-content,与主轴垂直的对其方式align-content):
.flex-container { display: -ms-flexbox; display: -webkit-flex; display: flex; /*主轴方向:项目排列方向水平*/ -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; /*超出容器后是否换行:换行*/ -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; /*主轴对齐方向:水平居中*/ -webkit-justify-content: center; -ms-flex-pack: center; justify-content: center; /*垂直方向的对齐方式:垂直居中*/ -webkit-align-content: center; -ms-flex-line-pack: center; align-content: center; -webkit-align-items: center; -ms-flex-align: center; align-items: center; }
你了解哪些布局?你平时有使用过什么布局实现?
- 浮动布局
- 弹性盒模型布局:主要解决移动端屏幕宽度不定的问题。
- 定位布局
DOM
DOM操作——怎样添加、移除、移动、复制、创建和查找节点。
- createAttribute() 创建属性节点。
- createElement() 创建元素节点。
- createTextNode() 创建文本节点。
- parent.removeChild(child);
- parent.replaceChild(new,old);
- parent.appendChild(child)
- parent.insertBefore(before,old)
- getElementById("id")
- getElementsByClassName("class")
- getElementsByTagName("p")
NodeList和Array的区别
NodeList是DOM操取出来的集合,是集合而不是普通的数组,因此不能使用数组元素的方法来操作nodelist
NodeList具有length,下标索引这些数组的属性特征
NodeList最大的特点就是时效性(live),这个集合是“动态的”:每当文档结构发生变化时,它会得到更新,因此在迭代nodelist的时候,应该将其length缓存到变量值,否则有可能会造成无限循环的问题,而且应该尽量减少访问nodelist的次数,因为每次访问nodelist都会进行一次基于文档的查询,我们应该将nodelist中取得的值缓存起来。
另外,我们可以把NodeList转化为数组,方便操作
在IE8+和其他浏览器当中可以使用
Array.prototype.slice.call(nodelist,0)
在IE中必须手动枚举成员
使用try-catch
另外ES6当中提供了Array.from()将类数组对象转化为数组var brr=Array.from(nodelist);
function converToArray(nodelist) { var arr = []; var len = nodelist.length; try { arr = Array.prototype.slice.call(nodelist, 0)); //针对非IE浏览器 } catch (error) { for (var i = 0; i < len; i++) { arr.push(nodelist[i]) } } return arr; }
事件委托是什么?事件委托的缺点
事件委托:是 JavaScript 中绑定事件的常用技巧,利用事件模型中的冒泡原理,将事件绑定在更上层的父元素时,通过检查事件的目标对象来判断并获取事件源。使用事件代理的好处是可以提高性能。
使用场景:
- 给许多子元素绑定相同的事件,比如ul的li元素,或者table的td元素。可以大量节省内存,减少事件注册。
- 可以实现当新增子对象时无需再次绑定事件,对于动态内容及其合适
缺点:事件代理的常用应用应该仅限于上述需求,如果把所有事件都用事件代理,可能会出现本不该被触发的事件被绑定上了事件的情况。
DOM0和DOM2的区别
- DOM0中事件一旦发生就直接调用事件句柄,无传播过程。在DOM2中有一个事件的传播过程。包括事件捕获,目标元素的事件处理程序运行,事件冒泡。
- 一个DOM对象注册多个类型相同的事件时,DOM0级中会发生事件的覆盖,而DOM2级中则会依次执行各个事件函数。
- DOM0级事件的注册是直接将事件处理程序作为js对象的属性,或者是将js代码作为HTML元素的性质值。在DOM2中,事件的注册可以使用addEventListener("click",fn,false)的方法。事件删除用removeEventListener()
冒泡和捕捉
- 事件捕捉:事件由document对象一直向下传播到目标元素
- 事件冒泡:事件从目标元素上升一直打到document
如何阻止事件冒泡和默认事件
- IE:window.event.cancelBuble=true;
- DOM2:ev.stopPropogation();
- 阻止默认行为:return false;
事件模型
在各种浏览器中存在3种事件模型:
1.DOM0(所有浏览器都支持):
- DOM0中事件一旦发生就直接调用事件句柄,无传播过程
- 一个DOM对象注册多个类型相同的事件时,DOM0级中会发生事件的覆盖
- DOM0级事件的注册是直接将事件处理程序作为js对象的属性,或者是将js代码作为HTML元素的性质值。
2.DOM2(除了IE意外都支持)
- 在DOM2中有一个事件的传播过程。包括事件捕获,目标元素的事件处理程序运行,事件冒泡。
- DOM2级中一个DOM对象注册多个类型相同的事件时,则会依次执行各个事件函数。
- 在DOM2中,事件的注册可以使用addEventListener("click",fn,false)的方法。事件删除用removeEventListener()
- event对象是事件处理函数的参数,事件源是e.target
3.IE事件模型:
- IE的事件传播过程只有DOM0级和DOM2级中第二第三阶段,也就是只冒泡,不捕捉。
- ie中也可以在一个对象上添加多个事件处理函数
- 事件的注册用attachEvent("onclik",fn);事件删除用detachEvent();
- IE中的event对象不是事件处理函数的参数,而是window,并且事件源是srcElement
document.write()用法,和innerHTML区别?
document.write()方法可以用在两个方面:
- 页面载入过程中用实时脚本创建页面内容
- 用延时脚本创建本窗口或新窗口的内容。
document.write只能重绘整个页面。innerHTML可以重绘页面的一部分
window.onload和$(document).ready区别?用原生实现
window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行。
$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。
function ready(fn){ if(document.addEventListener) { //标准浏览器 document.addEventListener('DOMContentLoaded', function() { //注销事件, 避免反复触发 document.removeEventListener('DOMContentLoaded',arguments.callee, false); fn(); //执行函数 }, false); }else if(document.attachEvent) { //IE document.attachEvent('onreadystatechange', function() { if(document.readyState == 'complete') { document.detachEvent('onreadystatechange', arguments.callee); fn(); //函数执行 } }); } };
attribute和property的区别是什么?
- attribute是dom元素在文档中作为html标签拥有的属性;
- property就是dom元素在js中作为对象拥有的属性。
所以:
- 对于html的标准属性来说,attribute和property是同步的,是会自动更新的,
- 但是对于自定义的属性来说,他们是不同步的,
dom3新增加了哪些特性,哪些已经被完全接受了
事件循环
如何在页面中插入一些数据
原生js添加class怎么添加,如果本身已经有class了,会不会覆盖,怎么保留?
document.getElementById("flag").className = "mycalss"
JavaScript
eval是做什么的?
- 作用:把对应的字符串解析成js代码并运行,返回执行的结果。
- 缺点:应该避免使用eval,因为不安全,非常耗性能(两次,一次解析成js语句,一次执行)
- 应用场景:把json字符串转化为json对象。
js有哪些内置对象?
- Object,Array
- Boolean,Number,String
- Math,Date,Function,RegExp,Error,Argument,Global
js延迟加载的方式有哪些?
延迟javascript代码的加载是为了加快网页的访问速度
1.把延迟脚本放在页面底部(body标签里):如果把script标签放在head中,那么js加载完后才会加载页面,因为js会阻塞后面的代码的运行。这时候可以放在页面的底部,文档会按照从上到下的顺序加载。
2.动态创建DOM的方式:在文档都加载完后,创建script标签,插入到DOM中
//这些代码应被放置在