书签 分享 收藏 举报 版权申诉 / 41

类型Web前端应该掌握的十大内容.docx

  • 文档编号:18555351
  • 上传时间:2023-08-19
  • 格式:DOCX
  • 页数:41
  • 大小:345.19KB
的样式,而外部定义指经由

  2、有!

important声明的规则高于一切。

  3、如果!

important声明冲突,则比较优先权。

  4、如果优先权一样,则按照在源码中出现的顺序决定,后来者居上。

  5、由继承而得到的样式没有specificity的计算,它低于一切其它规则(比如全局选择符*定义的规则)。

  6、关于经由@import加载的外部样式,由于@import必须出现在所有其它规则定义之前(如不是,则浏览器应该忽略之),所以按照后来居上原则,一般优先权冲突时是占下风的。

  还需要说一下,IE是可以识别位置错误的@import的,但无论@import在什么地方,它都认为是位于所有其它规则定义之前的,这可能会引发一些误会。

  优先权问题看起来简单,但背后还是有非常复杂的机制,在实际应用中需要多多留意。

二、js中apply和call方法有什么不同。

  如果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而怪异的感觉,因为意识上往往不可能的事偏偏就发生了,甚至觉得不可理喻.如果在学JavaScript这自由而变幻无穷的语言过程中遇到这种感觉,那么就从现在形始,请放下的您的”偏见”,因为这对您来说绝对是一片新大陆。

好,言归正传,先理解JavaScrtipt动态变换运行时上下文特性,这种特性主要就体现在apply,call两个方法的运用上.

区分apply,call就一句话,

  foo.call(this,arg1,arg2,arg3)==foo.apply(this,arguments)==this.foo(arg1,arg2,arg3)

call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call,apply属性.既然作为方法的属性,那它们的使用就当然是针对方法的了.这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同.

相同点:

两个方法产生的作用是完全一样的

不同点:

方法传递的参数不同

那什么是方法产生的作用,方法传递的参数是什么呢?

我们就上面的foo.call(this,arg1,arg2,arg3)展开分析.

foo是一个方法,this是方法执行时上下文相关对象,arg1,arg2,arg3是传给foo方法的参数.这里所谓的方法执行时上下文相关对象,如果有面向对象的编程基础,那很好理解,就是在类实例化后对象中的this.

在JavaScript中,代码总是有一个上下文对象,代码处理该对象之内.上下文对象是通过this变量来体现的,这个this变量永远指向当前代码所处的对象中.

可见,A,B类都有一个message属性(面向对象中所说的成员),A有获取消息的getMessage方法,B有设置消息的setMessage方法,下面来显示call的威力.

  //创建一个B类实例对象

varb=newB();

//给对象a动态指派b的setMessage方法,注意,a本身是没有这方法的!

b.setMessage.call(a,"a的消息");

//下面将显示"a的消息"

alert(a.getMessage());

//给对象b动态指派a的getMessage方法,注意,b本身也是没有这方法的!

这就是动态语言JavaScriptcall的威力所在!

简直是”无中生有”,对象的方法可以任意指派,而对象本身一直都是没有这方法的,注意是指派,通俗点就是,方法是借给另一个对象的调用去完成任务,原理上是方法执行时上下文对象改变了.

所以b.setMessage.call(a,“a的消息”);就等于用a作执行时上下文对象调用b对象的setMessage方法,而这过程中与b一点关系都没有,作用等效于a.setMessage(“a的消息”);

因为apply与call产生的作用是一样的,可以说

call,apply作用就是借用别人的方法来调用,就像调用自己的一样.

好,理解了call,apply相同处—–作用后,再来看看它们的区别,看过上面例子,相信您大概知道了.

从b.setMessage.call(a,“a的消息”)等效于a.setMessage(“a的消息”)可以看出,“a的消息”在call中作为一个参数传递,

那么在apply中是怎么表示的呢,直接解释说不清楚,apply要结合应用场景才一目了然.我们来设计一个应用场景:

viewsourceprint?

01functionprint(a,b,c,d){

02alert(a+b+c+d);

03}

04functionexample(a,b,c,d){

05//用call方式借用print,参数显式打散传递

06print.call(this,a,b,c,d);

07//用apply方式借用print,参数作为一个数组传递,

08//这里直接用JavaScript方法内本身有的arguments数组

09print.apply(this,arguments);

10//或者封装成数组

11print.apply(this,[a,b,c,d]);

12}

13//下面将显示”背光脚本”

14example(”背”,“光”,“脚”,“本”);

在这场景中,example方法内,a,b,c,d作为方法传递的参数,方法分别运用了apply,call去借print方法来调用,

最后一句由于直接调用example方法,所以在该方法中的上下文对象this就是window对象.

所以,call,apply方法它们除了第一个参数,即执行时上下文对象相同外,call方法的其它参数将依次传递给借用的方法作参数,而apply就两个参数,第二个参数为一个数组传递.所以可以说成

call,apply方法区别是,从第二个参数起,call方法参数将依次传递给借用的方法作参数,而apply直接将这些参数放到一个数组中再传递,最后借用方法的参数列表是一样的.

应用场景:

当参数明确时可用call,当参数不明确时可用apply给合arguments

1//例

2print.call(window,“背”,“光”,“脚”,“本”);

3//foo参数可能为多个

4functionfoo(){

5print.apply(window,arguments);

6}

三、如何用js获取网页文件中的div。

本文介绍一下使用js获取div内容,兼容各浏览器。

document.getelementbyid("ddhdh").innerHTML可以获取到div中的全部数据,包括标签。

但是只是在IE和OPERA中使用

document.getelementbyid("ddhdh").innerTEXT可以获取到div中的文本数据,不会获取到标签。

但是只是在IE和OPERA中使用

document.getElementById(“text”).textContent用于在火狐中获取数据

上面的标签在这几钟基于两种浏览器的内核的浏览器,这几种方法是不兼容的。

下面是解决方案

兼容火狐ie的js获取div的内容

if(navigator.appName.indexOf(“Explorer”)>-1)

vartext=document.getElementById(“text”).innerText;

else

vartext=document.getElementById(“text”).textContent;

用来获取浏览器的名称,第一句话的意思就是当获取到的浏览器的名称中带有Explorer。

涉及到indexof用法

strObj.indexOf(subString[,startIndex])

参数

strObj

必选项。

String对象或文字。

subString

必选项。

要在String对象中查找的子字符串。

starIndex

可选项。

该整数值指出在String对象内开始查找的索引。

如果省略,则从字符串的开始处查找。

indexOf方法返回一个整数值,指出String对象内子字符串的开始位置。

如果没有找到子字符串,则返回-1。

四、常见的浏览器有几种?

如何来解决浏览器不兼容的问题。

(列举10例)。

常见的浏览器:

IE火狐麦拓傲游腾讯TTMozilla。

一、 Comments区别IE和w3c的方法

.hack{

width:

600px;      /*FF*/

*width:

700px;     /*IE*/

}

——————————————————————————–

二、 区别IE5.5、IE6、IE7、w3c的方法

.qq{

background:

#f00;                  /*w3c*/

*background:

#00f!

important;       /*IE7*/

_background:

#0f0;                 /*IE6*/

_background/**/:

#ccc             /*IE5.5*/

}

——————————————————————————–

三、 针对Opera、Safari、Chrome

.qq{

background:

#000;        /*IEFF*/

}                 

@mediaalland(min-width:

0px){

.qq{background:

#000;  }          /*Opera、Safari、Chrome*/

}

四、 实现文本自动换行

1. IE中解决方法

word-wrap:

break-word;

word-break:

break-all;

注:

在要换行的内容相应的单元格或者DIV里加入,如:

break-word;>

break-word;>

2. FireFox中解决方法(脚本):

functiontoBreakWord(intLen,id){

varobj=document.getElementById(id);

varstrContent=obj.innerHTML;

varstrTemp=”";

while(strContent.length>intLen){

strTemp+=strContent.substr(0,intLen)+”
”;

strContent=strContent.substr(intLen,strContent.length);

}

strTemp+=strContent;

obj.innerHTML=strTemp;

}

注:

以上脚本放在前面。

调用时如下写法:

?

 同个页面单处调用:

这里是要应用换行的内容

toBreakWord(60,“content”);

?

 同个页面多处调用:

这里是要应用换行的内容

toBreakWord(60,“content”);

这里是要应用换行的内容

toBreakWord(60,“content2″);

注:

把应用的JS写在

后面,其中60表示一行要显示多少字字符,注意多个调用时ID的相应变化,不能同一个ID名称,应用上面的方法后IE也会是按设定的字符数换行,但是IE里面支持自动换行,所以只要判断一下是否为IE,如果不是IE就不要输出上面的。

toBreakWord(60,“content”);

这段JS,如果不是就要输出。

五、 !

important

随着IE7对!

important的支持,!

important方法现在只针对IE6的HACK.(注意写法.记得该声明位置需要提前.)

CSS代码:

   

(1) IE6/IE77对FireFox

*+html与*html是IE特有的标签,firefox暂不支持。

而*+html又为IE7特有标签.

CSS代码:

  

注意:

*+html对IE7的HACK必须保证HTML顶部有如下声明:

XML/HTML代码:

DOCTYPEHTMLPUBLIC“-//W3C//DTDHTML4.01Transitional//EN” ”http:

//www.w3.org/TR/html4/loose.dtd”>  

六、 float闭合

将以下代码加入GlobalCSS中,给需要闭合的div加上class=”clearfix”即可。

CSS代码

   

七、 其他兼容技巧

1. FF下给div设置padding后会导致width和height增加,但IE不会.(可用!

important解决)

2. 居中问题.

?

 垂直居中.将line-height设置为当前div相同的高度,再通过vertical-align:

middle.(注意内容不要换行.)

?

 水平居中.margin:

0auto;(当然不是万能)

3. 给a标签内内容加上样式,需要设置display:

block;(常见于导航)

4. FF和IE对BOX理解的差异导致相差2px的还有设为float的div在IE下margin加倍等问题.

5. ul标签在FF下面默认有list-style和padding。

最好事先声明,以避免不必要的麻烦.(常见于导航标签和内容列表)

6. 作为外部wrapper的div不要定死高度,最好还加上overflow:

hidden。

以达到高度自适应.

7. 关于手形光标使用cursor:

pointer,而hand只适用于IE。

CSS代码

/*FF*/  

.submitbutton{   

   float:

left;   

   width:

40px;   

   height:

57px;   

   margin-top:

24px;   

   margin-right:

12px;   

}   

/*IE6*/  

*html.submitbutton{   

   margin-top:

21px;   

}   

/*IE7*/  

*+html.submitbutton{   

   margin-top:

21px;   

 

八、 控制网页背景在IE和Firefox中显示不同颜色

虽然实际网页很少这样制作,但这是体验CSSHack控制能力的一个简单明了的好例子。

 

注:

?

 IE6可识别*,但无法识别!

important

?

 IE7可识别*,也可识别!

important

?

 Firefox无法识别*,但可识别!

important

 

注:

?

 IE6可识别*和下划线”_”

?

 IE7可识别*,无法识别下划线”_”

?

 Firefox无法识别*或下划线”_”

九、 控制网页页面宽度。

使网页在IE中宽度为400px,在Firefox中宽度为700px

 

注:

?

 IE可识别”+”

?

 Firefox无法识别”+”

3.控制网页页面高度。

使网页在IE6中高度为50px,在IE7或IE6中高度为100px,在Firefox中高度为300px

 

注:

?

 IE6可识别下划线”_”

?

 IE6和IE7可识别*

?

 IE7无法识别下划线”_”

?

 Firefox无法识别”*或下划线”_”

?

 IE的if条件Hack

十、 IE的if条件Hack

可以让IE区别于其它浏览器和IE个版本之间的浏览器,它利用…这样的语法让IE浏览器对其进行解析,属于IE浏览器专有

?

 

--[ifIE]>OnlyIE

[endif]-->   所有的IE可识别

?

 

--[ifIE5.0]>OnlyIE5.0

[endif]--> 只有IE5.0可以识别

?

 

--[ifgtIE5.0]>OnlyIE5.0

[endif]--> IE5.0包换IE5.5都可以识别

?

 

--[ifltIE6]>OnlyIE6

[endif]-->  仅IE6可识别

?

 

--[ifgteIE6]>OnlyIE6

[endif]--> IE6以及IE6以下的IE5.x都可识别

?

 

--[iflteIE7]>OnlyIE7

[endif]--> 仅IE7可识别

说明:

?

 gt:

 greaterthan,选择条件版本以上版本,不包含条件版本

?

 lt:

 lessthan,选择条件版本以下版本,不包含条件版本

?

 gte:

greaterthanorequal,选择条件版本以

举报
举报
版权申诉
版权申诉
word格式文档无特别注明外均可编辑修改;预览文档经过压缩,下载后原文更清晰! 立即下载
配套讲稿:

如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

特殊限制:

部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

关 键  词:
Web 前端 应该 掌握 内容
提示  冰点文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:Web前端应该掌握的十大内容.docx
链接地址:https://www.bingdoc.com/p-18555351.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2


收起
展开