zoukankan      html  css  js  c++  java
  • 前端面试必备技巧整理

    1、DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动?

    DOM中两个节点存在的关系无非3种:
    1.1.包含与被包含,IE率先引入的contains()方法可检测,例 A.contains(B), 即检查节点B是否是节点A的子节点,返回布尔值,现大多数浏览器都支持; DOM level 3引入的compareDocumentPosition(),确定节点之间的关系, 返回值为一个表示关系的位掩码(见图-1)的合(或者是按位或的值,并不知道具体实现), 通过按位与操作符“&”可确定关系。例:节点A(例:<html>)在节点B(例:<body>)前--位掩码为4, 且节点A包含节点B--位掩码为16,则返回值为20,通过"!!(20&16)"这种方式即可返回一个布尔值, 解析:“20&16”返回16证明节点A包含节点B(即:16),通过!!取得16的布尔值true。
    1.2父与子 获取父节点:node.parentNode, node.parentElement,两者的区别在于后者只能获取元素,例如:图-2; 获取子节点:childNodes(以NodeList对象存在的子节点集合),firstChild,lastChild
    1.3同辈(兄弟节点) nextSibling,previousSibling
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    2、DOM操作——怎样添加、移除、移动、复制、创建和查找节点。?
    (1)创建新节点
          createDocumentFragment()    //创建一个DOM片段
          createElement()   //创建一个具体的元素
          createTextNode()   //创建一个文本节点
    (2)添加、移除、替换、插入
          appendChild()
          removeChild()
          replaceChild()
          insertBefore() //在已有的子节点前插入一个新的子节点
     
    (3)查找
          getElementsByTagName()    //通过标签名称
          getElementsByName()    //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)
          getElementById()    //通过元素Id,唯一性
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    3、事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别。

    在浏览器解析事件的时候,有两种触发方式,一种叫做Bubbling(冒泡),另外一种叫做Capturing(捕获)。由上图可以看出来,冒泡的方式效果就是当一个DOM元素的某事件例如click事件被fire时,依次它的父元素的click事件也被fire(触发),一直传递到最顶层的body元素为止。而捕获的触发方式正好相反,当某个元素的click事件被触发时,先从最顶层的body元素click事件被触发开始,一直传递到真正被触发的元素为止。

    这次我将讨论W3C的标准DOM事件模型和IE独立门户的DOM事件模型到底有多少区别,首先我们可以回想一下目前大多数Js程序员习惯如何绑定事件到DOM元素上,最常见的就是obj.onclick=handler这种方式(更恶劣的是在Html代码的元素标签中直接加上onclick属性,完全没达到视图和动作分开的原则)。我们暂时称这种方式的事件添加为Traditional(传统方式)吧,IE有自己的IE Event Module,而火狐等浏览器则遵循的W3C方式的Event Module,下面看看这三者各自的优缺点在哪里——

    1) Traditional Module

    传统方式的事件模型即直接在DOM元素上绑定事件处理器,例如—

    window.onload=function(){…}

    obj.onmouseover=function(e){…}

    obj.onclick=function(){…}

    首先这种方式是无论在IE还是Firefox等其他浏览器上都可以成功运行的通用方式。这便是它最大的优势了,而且在Event处理函数内部的this变量无一例外的都只想被绑定的DOM元素,这使得Js程序员可以大大利用this关键字做很多事情。

    至于它的缺点也很明显,就是传统方式只支持Bubbling,而不支持Capturing,并且一次只能绑定一个事件处理器在DOM元素上,无法实现多Handler绑定。最后就是function参数中的event参数只对非IE浏览器有效果(因为IE浏览器有特制的window.event)。

    2) W3C (Firefox.e.g) Event Module

    Firefox等浏览器很坚决的遵循W3C标准来制定浏览器事件模型,使用addEventListener和removeEventListener两个函数,看几个例子—

    window.addEventListener(‘load’,function(){…},false);

    document.body.addEventListener(‘keypress’,function{…},false);

    obj.addEventListener(‘mouseover’,MV,true);

    function MV(){…}

    addEventListener带有三个参数,第一个参数是事件类型,就是我们熟知的那些事件名字去掉前面的’on’,第二个参数是处理函数,可以直接给函数字面量或者函数名,第三个参数是boolean值,表示事件是否支持Capturing。

    W3C的事件模型优点是Bubbling和Capturing都支持,并且可以在一个DOM元素上绑定多个事件处理器,各自并不会冲突。并且在处理函数内部,this关键字仍然可以使用只想被绑定的DOM元素。另外function参数列表的第一个位置(不管是否显示调用),都永远是event对象的引用。

    至于它的缺点,很不幸的就只有在市场份额最大的IE浏览器下不可使用这一点。

    3) IE Event Module

    IE自己的事件模型跟W3C的类似,但主要是通过attachEvent和detachEvent两个函数来实现的。依旧看几个例子吧—

    window.attachEvent(‘onload’,function(){…});

    document.body.attachEvent(‘onkeypress’,myKeyHandler);

    可以发现它跟W3C的区别是没有第三个参数,而且第一个表示事件类型的参数也必须把’on’给加上。这种方式的优点就是能绑定多个事件处理函数在同一个DOM元素上。

    至于它的缺点,为什么如今在实际开发中很少见呢?首先IE浏览器本身只支持Bubbling不支持Capturing;而且在事件处理的function内部this关键字也无法使用,因为this永远都只想window object这个全局对象。要想得到event对象必须通过window.event方式,最后一点,在别的浏览器中,它显然是无法工作的。

    最后我在推荐两个必须知道的IE和W3C标准的区别用法吧—

    ①、 当我们需要阻止浏览器某DOM元素的默认行为的时候在W3C下调用e.preventDefault(),而在IE下则通过window.event.returnValue=false来实现。

    ②、当我们要阻止事件冒泡的时候,在W3C标准里调用e.stopPropagation(),而在IE下通过设置window.event.cancelBubble=true来实现。

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    4、XMLHttpRequest——这是什么、怎样完整地执行一次GET请求、怎样检测错误?
    这是ajax事件的一个名称,缩写为XHR,是使用xml进行web服务器数据交互的一种方式,;执行一次get请求有两种方式,一种是原生JS,一种是JQ封装好的方法。使用JQ的话,$.get();检测错误的话,可以使用里面的error事件,然后打印出相应的错误码
     ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     5、严格模式与混杂模式——如何触发这两种模式,区分它们有何意义?

    区别:严格模式是浏览器根据规范去显示页面;混杂模式是以一种向后兼容的方式去显示

    意义:决定浏览器如何渲染网站(浏览器使用那种规范去解析网页)

    触发:浏览器根据doctype是否存在和使用的是那种dtd来决定。

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    6、盒模型——外边距、内边距和边框之间的关系,IE 8以下版本的浏览器中的盒模型有什么不同?
    一个元素盒模型的层次从内到外分别为:内边距、边框和外边距
    IE8以下浏览器的盒模型中定义的元素的宽高不包括内边距和边框
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    7、浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题?
     
    需要浮动的元素可使用CSS中float属性来定义元素的浮动位置,left:往左浮动,right:往右浮动
    浮动元素引起的问题:
     1).父元素的高度无法被撑开,影响与父元素同级的元素
     2).与浮动元素同级的非浮动元素会跟随其后
     3).若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构
    解决方法:

    使用CSS中的clear:both;属性来清除元素的浮动可解决2、3问题

    问题1,添加如下样式,给父元素添加clearfix样式:

    .clearfix:after{content: ".";display: block;height: 0;clear: both;visibility: hidden;}
    .clearfix{display: inline-block;}  /* for IE/Mac *
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    8、HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由?
     XHTML 元素必须被正确地嵌套
         XHTML 元素必须被关闭,空标签也必须被关闭,如 <br> 必须写成 <br />
         XHTML 标签名必须用小写字母
         XHTML 文档必须拥有根元素
         XHTML 文档要求给所有属性赋一个值
         XHTML 要求所有的属性必须用引号""括起来
         XHTML 文档需要把所有 < 、>、& 等特殊符号用编码表示
         XHTML 文档不要在注释内容中使“--”
         XHTML 图片必须有说明文字
         XHTML 文档中用id属性代替name属性
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    9、JSON——它是什么、为什么应该使用它、到底该怎么使用它,说出实现细节来?
    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。 JSON建构于两种结构:
    “名称/值”对的集合(A collection of name/value
    关联数组 (associative array)。





  • 相关阅读:
    C++ string 类的 find 方法实例详解
    linux系统中errno与error对照表
    tshark (wireshark)笔记
    自己签发免费ssl证书
    Go语言练习:网络编程实例——简易图片上传网站
    java开源工具包-Jodd框架
    数据库性能瓶颈解决方案
    [转载]如何快速学习一门技术
    [转载]IBM公司发布了最新的power7服务器p750 p770 p780
    计算机组成原理 — 指令系统
  • 原文地址:https://www.cnblogs.com/agen-su/p/7885424.html
Copyright © 2011-2022 走看看