找了那么多,似乎就这篇比较通俗易懂,就偷过来了

DOM树


首先,可视化一个HMTL文档的DOM树是很有帮助的。一个简单的HTML页面看起来就像是这个样子:
事件冒泡(又称事件传播)
当我们点击一个链接时,其触发了链接元素的单击事件,该事件则引发任何我们已绑定到该元素的单击事件上的函数的执行。

代码如下:
$('a').bind('click',function(){alert('that tickles!')})
因此一个单击操作会触发alert函数的执行。
click事件接着会向树的根方向传播,广播到父元素,然后接着是每个祖先元素,只要是它的某个后代元素上的单击事件被触发,事件就会传给它。
在操纵DOM的语境中,document是根节点。
现在我们可以较容易地说明.bind()、.live()和.delegate()的不同之处了。
.bind()

代码如下:
$('a').bind('click',function(){alert('That tickles!');})

这是最简单的绑定方法了。JQuery扫描文档找出所有的$(‘a’)元素,并把alert函数绑定到每个元素的click事件上。
.live()

代码如下:
$('a').live('click',function(){alert('That tickles!')})

JQuery把alert函数绑定到$(document)元素上,并使用’click’和’a'作为参数。任何时候只要有事件冒泡到document节点上,它就查看该事件是否是一个click事件,以及该事件的目标元素与’a'这一CSS选择器是否匹配,如果都是的话,则执行函数。
live方法还可以被绑定到具体的元素(或“context”)而不是document上,像这样:

代码如下:
$('a',$('#container')[0]).live('click',function(){alert('That tickles!')})

.delegate()

代码如下:
$('#container').delegate('a','click',function(){alert('That tickles!')})

JQuery扫描文档查找$(‘#container’),并使用click事件和’a'这一CSS选择器作为参数把alert函数绑定到$(‘#container’)上。任何时候只要有事件冒泡到$(‘#container’)上,它就查看该事件是否是click事件,以及该事件的目标元素是否与CSS选择器相匹配。如果两种检查的结果都为真的话,它就执行函数。
可以注意到,这一过程与.live()类似,但是其把处理程序绑定到具体的元素而非document这一根上。精明的JS’er们可能会做出这样的结论,即$(‘a’).live() == $(document).delegate(‘a’),是这样吗?嗯,不,不完全是。
为什么.delegate()要比.live()好用
基于几个原因,人们通常更愿意选用jQuery的delegate方法而不是live方法。考虑下面的例子:

代码如下:
$('a').live('click', function() { blah() });

$(document).delegate('a', 'click', function() { blah() });

后者实际上要快过前者,因为前者首先要扫描整个的文档查找所有的$(‘a’)元素,把它们存成jQuery对象。尽管live函数仅需要把’a'作为串参数传递以用做之后的判断,但是$()函数并未“知道”被链接的方法将会是.live()。
而另一方面,delegate方法仅需要查找并存储$(document)元素。
一种寻求避开这一问题的方法是调用在$(document).ready()之外绑定的live,这样它就会立即执行。在这种方式下,其会在DOM获得填充之前运行,因此就不会查找元素或是创建jQuery对象了。

灵活性和链能力
live函数也挺令人费解的。想想看,它被链到$(‘a’)对象集上,但其实际上是在$(document)对象上发生作用。由于这个原因,它能够试图以一种吓死人的方式来把方法链到自身上。实际上,我想说的是,以$.live(‘a’,…)这一形式作为一种全局性的jQuery方法,live方法会更具意义一些。
仅支持CSS选择器
最后一点,live方法有一个非常大的缺点,那就是它仅能针对直接的CSS选择器做操作,这使得它变得非常的不灵活。
欲了解更多关于CSS选择器的缺点,请参阅Exploring jQuery .live() and .die()一文。
更新:感谢Hacker News上的pedalpete和后面评论中的Ellsass提醒我加入接下来的这一节内容。
为什么选择.live()或.delegate()而不是.bind()
毕竟,bind看起来似乎更加的明确和直接,难道不是吗?嗯,有两个原因让我们更愿意选择delegate或live而不是bind:
1. 为了把处理程序附加到可能还未存在于DOM中的DOM元素之上。因为bind是直接把处理程序绑定到各个元素上,它不能把处理程序绑定到还未存在于页面中的元素之上。
2. 如果你运行了$(‘a’).bind(…),而后新的链接经由AJAX加入到了页面中,则你的bind处理程序对于这些新加入的链接来说是无效的。而另一方面live和delegate则是被绑定到另一个祖先节点上,因此其对于任何目前或是将来存在于该祖先元素之内的元素都是有效的。
3. 或者为了把处理程序附加到单个元素上或是一小组元素之上,监听后代元素上的事件而不是循环遍历并把同一个函数逐个附加到DOM中的100个元素上。把处理程序附加到一个(或是一小组)祖先元素上而不是直接把处理程序附加到页面中的所有元素上,这种做法带来了性能上的好处。
停止传播
最后一个我想做的提醒与事件传播有关。通常情况下,我们可以通过使用这样的事件方法来终止处理函数的执行:

代码如下:
$('a').bind('click',function(e){
 e.preventDefault()
 e.stopPropagation()}
 )

不过,当我们使用live或是delegate方法的时候,处理函数实际上并没有在运行,需要等到事件冒泡到处理程序实际绑定的元素上时函数才会运行。而到此时为止,我们的其他的来自.bind()的处理函数早已运行了。

 

方法一:
jQuery.fn.setApDiv=function () {
//apDiv浮动层显示位置居中控制
var wheight=$(window).height();
var wwidth=$(window).width();
var apHeight=wheight-$(“#apDiv”).height();
var apWidth=wwidth-$(“#apDiv”).width();
$(“#apDiv”).css(“top”,apHeight/2);
$(“#apDiv”).css(“left”,apWidth/2);
}

调用方法:$(“#apDiv”).setApDiv();
——————————————————————————–
方法二:
//jQuery 应用扩展
jQuery.extend({
// 设置 apDiv
setApDiv:function () {
//apDiv浮动层显示位置居中控制
var wheight=$(window).height();
var wwidth=$(window).width();
var apHeight=wheight-$(“#apDiv”).height();
var apWidth=wwidth-$(“#apDiv”).width();
$(“#apDiv”).css(“top”,apHeight/2);
$(“#apDiv”).css(“left”,apWidth/2);
}
});
调用方法:$.setApDiv();

总结 一种如$.extend({‘aa’:function(){}}),这种调用时就是这样$.aa(),另一种如$.fn.extend({‘aa’:function(){}}),这种调用时就得这样,$(this).aa()

——————————————————————————–
方法三:

$.postJSON = function(url, data, callback) {
$.post(url, data, callback, “json”);
};
调用方法:$.postJSON(‘/post/getsecurejsonpost’,{}, function(data) {});

转自:http://www.cnblogs.com/chengxiaohui/articles/1914232.html

 

使用CDN的好处很明显,就是速度快,比如Google提供的CDN,在全球有无数节点,比我们自己的服务器一般要快很多,另外用这些CDN我们就不用在保存一份文件了,还可以永远使用最新的版本。这里列举了几家稳定的,速度快的CDN供大家选择。

1. Google CDN

http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js

Google Ajax CDN Documentation

2. Jquery.com CDN

http://code.jquery.com/jquery.min.js, 这个永远是最新版本的JQuery

JQuery.com CDN 文件列表,包括各个版本,JQuery UI等

3. Microsoft CDN

http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.3.min.js

Microsoft Ajax CDN Documentation

转自:http://blog.csdn.net/hld_hepeng/article/details/7719438

 

jQuery 基本选择器

  jQuery选择器的符号与CSS样式表选择器一样,id使用#,class使用.,html选择器直接使用标签,如div,td等,还有其他多种选择器,后面会陆续介绍到。

[ id 选择器]

原本在JavaScript下,要想选择一个id=“aa”的需要这样:document.getElementById(“aa”); 才能获取到aa这个对象,而通过jQuery选择器,只需这样:$(“#aa”)  就获取到了id为aa的对象,从而就可以对它进行操作,十分的方便。也是我使用最频繁的一个选择器。

如果查找含有特殊字符的元素,如:
<span id=”aa:bb”></span>
<span id=”aa[bb]“></span>
<span id=”aa.bb”></span>

就需要使用反斜杠来进行字符的转义了,以上三个例子就需要这样获取到对应的对象:

$(“#aa\\:bb”)
$(“#aa\\[bb\\]“)
$(“#aa\\.bb”)
这样才能通过ID正确获取到该对象。如果存在多个id相同的对象,则只会匹配到第一次出现的。

[ class 选择器 ]

  使用上与id选择器差不多,只是id用的是“ # ”而class选择器使用的就是“ . ”,只要class相同的,就能被匹配到,如:
<div class=’notSelect’>不选择我</div>
<span class=’selectMe’>选择我</div>
<p class=’selectMe’>也选我</p>
使用$(“.selectMe”)将会匹配到<span class=’selectMe’>选择我</div> 与 <p class=’selectMe’>也选我</p>

[ * 选择器 ]

$(“*”)将会匹配到网页中所有的元素,我个人是没用过这个,因为好像用不到这种,不过了解下也好。

[ HTML 选择器 ]

如果需要选择网页中出现的所有div,则可以通过这种方式进行选择 $(“div”) ,用的也比较少,css中倒是经常这么来编辑样式,不过jQuery这种方式选择,是不是说可以用来整体修改某中html标签的整体样式?有空可以尝试一下。

[ 同时选择多种元素 ]

最后这种应该算是比 * 选择器范围小点的了,它可以选择多个元素,然后一起返回,用法是$(“#id,p.myClass,div,span,td”)

中间用“ , ”分开,就会将id为id的,class=”myClass”的p标记,还有div,span,td都匹配到,并且返回。十分的牛X。

 

 

jQuery 索引值选择器

索引值都是从 0 开始的。也是非常有用的一种选择器。比如想让表格奇偶行显示不同的颜色,则可以使用索引值选择器进行操作。

[ :first 选择器 ] [ :last 选择器 ]

<table>
<tr><td>Header 1</td></tr>
<tr><td>Value 1</td></tr>
<tr><td>Value 2</td></tr>
</table>
比如上面的html代码,我们需要查找到第一行的元素对象,则可以通过这样获取 $(“tr:first”) 就可以获得
<tr><td>Header 1</td></tr>
使用 $(“tr:last”) 就可以获取到 <tr><td>Value 2</td></tr> 元素对象

[ :not 选择器 ]

去除所有与给定选择器匹配的元素 在jQuery 1.3中,已经支持复杂选择器了,例如:not(div a) 和 :not(div,a)

查找所有未选中的 input 元素
<input name=”apple” />
<input name=”flower” checked=”checked” />
使用 $(“input:not(:checked)”) 得到 <input name=”apple” />

[ :even 偶选择器 ]  [ : odd  奇选择器 ]     奇偶选择器

<table>
<tr><td>Header 1</td></tr>
<tr><td>Value 1</td></tr>
<tr><td>Value 2</td></tr>
</table>

奇偶选择器是从0开始计算的,如果需要选择上面表格的偶行,则使用 $(“tr:even”) 选中
<tr><td>Header 1</td></tr> 与 <tr><td>Value 2</td></tr>
使用$(“tr:odd”) 选中   <tr><td>Value 1</td></tr>

[ :eq 索引选择器 ] 

<table>
<tr><td>Header 1</td></tr>
<tr><td>Value 1</td></tr>
<tr><td>Value 2</td></tr>
</table>

索引选择器,也是从0开始,如果我要选择第二行,则使用 $(“tr:eq(1)”)即可获得  <tr><td>Value 1</td></tr>

[ :gt 比给定索引大 ] [ :lt 比给定索引小 ] 的选择器

<table>
<tr><td>Header 1</td></tr>
<tr><td>Value 1</td></tr>
<tr><td>Value 2</td></tr>
</table>

$(“tr:gt(0)”) 将匹配  <tr><td>Value 1</td></tr> 与 <tr><td>Value 2</td></tr>  选择比给定索引为 0 大的元素

$(“tr:lt(2)”) 将匹配  <tr><td>Header 1</td></tr> 与 <tr><td>Value 1</td></tr>  选择比给定索引为 2 小的元素

[ :header 标题元素选择器 ]

<h1>Header 1</h1>
<p>Contents 1</p>
<h2>Header 2</h2>
<p>Contents 2</p>

如果要选择h1,h2元素,则使用 $(“:header”) 即可获得 <h1>Header 1</h1> 与 <h2>Header 2</h2>元素,从而对它们进行操作,可以修改背景,或者字体等。

[ :animated 正在执行动画元素 选择器 ]

没用过这种选择器,API上介绍说是:只有对不在执行动画效果的元素执行一个动画特效。一个页面内,没动画的元素多了去了,如果都执行动画,那不卡死,不过通过这个选择器与其它选择器结合,倒是能执行很多功能。API实例:
<button id=”run”>Run</button><div></div>
执行如下代码:
$(“#run”).click(function(){
$(“div:not(:animated)”).animate({ left: “+=20″ }, 1000);
});
实现的效果,每1秒钟,不在执行动画的div元素向右移动20像素。

 

 

jQuery 层级选择器

一般情况下,通过上面的选择器,灵活的运用,就已经能方便,快捷的找到自己所需的绝大部分的元素了,但是,还有一些特殊情况下,可能通过上面的查找方式不太适合,并且效率上有所欠缺,所以我们还要了解层级选择器的用法,这样才能更方便,更高效的让jQuery为我们服务。

[ 先人 后代选择器 ]

先来看看实例:

<div>
<a href=’chengwei2009.blog.163.com’ >snail的博客</a>
<span>Snail的博客</span>
<input type=’text’ name=’txtName’ value=’Snail_博客’ />
<a href=’chengwei2009.blog.163.com’ >依然是snail的博客</a>
</div>
<a href=’chengwei2009.blog.163.com’ >还是snail的博客</a>

这时,如果这么使用选择器 $(“div a”)将会选择到
<a href=’chengwei2009.blog.163.com’ >snail的博客</a> 与 <a href=’chengwei2009.blog.163.com’ >依然是snail的博客</a>
比起$(“a”)将所有a标记都选中,范围小了很多,通过这种方式,我们可以选择某类或者某个id区域内的某种或者某个元素,先选中了“先人”,再去找它的“后代”,而不会盲目的查找全文,也是很有用的,比如说清空一个form中的input,如果不使用rest按钮,就可以使用这种方式来进行清除数据。

[ 父 > 子 选择器 ]

定义为:在给定的父元素下匹配所有的子元素。先看一个实例:

<div id =”parent”>
<div>小儿子</div>
<div>大儿子
<div>孙子</div>
<div>孙女</div>
</div>
</div>

如果使用:$(“#parent > div”) 则只会匹配到<div>小儿子</div> 与 <div>大儿子</div> 不会再选择到“孙子”与“孙女”,当然,你要是通过大儿子,再去找孙子,孙女,是另外一回事。

[ 前 +  后 选择器 ]

格式 $(“prev + next”)   其中prev为:任何有效选择器,next为:一个有效选择器,并且紧跟在着第一个选择器后面,API文档上面的例子:
<form>
<label>Name:</label>
<input name=”name” />
<fieldset>
<label>Newsletter:</label>
<input name=”newsletter” />
</fieldset>
</form>
<input name=”none” />
使用 $(“label + input”),将得到 <input name=”name” /> 与 <input name=”newsletter” />

[ 前 ~ 同辈 选择器 ]

格式 $(“prev ~ siblings”)    其中prev为:任何有效选择器,siblings 一个选择器,并且它作为prev选择器的同辈,API文档例子:

找到所有与表单同辈的 input 元素
<form>
<label>Name:</label>
<input name=”name” />
<fieldset>
<label>Newsletter:</label>
<input name=”newsletter” />
</fieldset>
</form>
<input name=”none” />
使用 $(“form ~ input”)选择器,查找到的结果为:<input name=”none” />

 

jQuery 1.7.1已于近日发布。新版本做出多项改进,如新的事件API,委托事件的性能更高,对IE6-8的HTML5支持,对AMD规范的支持等等。同时,jQuery还弃用了某些特性,以使jQuery保持精简。

以下是jQuery 1.7.1中一些让人感兴趣的新特性:

新的统一的事件API .on()替代了.bind()、.delegate()和.live();.off()替代了.unbind()、.undelegate()和.die()。

委托事件的性能改进:最终委托事件和1.6.4相比,节省了大约一半的时间。

更好地支持IE6-8下的HTML5标签:任何试图在IE 6/7/8中使用新的类似于<section>的HTML5标签的人,毫无疑问都会遇到IE 6/7/8无法解析这些标签,甚至将这些标签从文档中移除的问题。在jQuery 1.7.1中,为较旧IE版本中 .html() 一类的方法建立了对HTML5的支持。这一功能和以前的innerShiv相同。仍然需要在文档头部加入HTML5Shiv以使旧IE版本支持HTML5标签。

动画切换效果如.slideToggle()和.fadeToggle()更加直观 – 当前一个动画过早结束时,后续的动画能够恰当地重置。

支持AMD规范 jQuery现在可以和遵循AMD规范的脚本加载器协作,比如RequireJS或者curl.js。

jQuery团队还宣布,他们将开始弃用过时的特性,以使代码库更加精简,同时提高性能。有些API,比如.live()和.end()已在jQuery 1.7.1中被弃用 – 这些方法还将继续有效,但为了兼容以后的版本不建议使用它们。

一些非标准的特性在1.7.1版本中被彻底移除了

event.layerX和event.layerY

jQuery.isNaN()(非正式的函数)

jQuery.event.proxy()(非正式的方法)

关于新的弃用策略和已被弃用的特性,你可以在jQuery官网中获得更多信息。

 

对于一个还没过英语四级的娃来说,看几篇外语博文真不容易啊!如果解读有错,大家见笑了。
刚刚“研究”过几篇关于html5 shiv的文章,算是得出一些心得吧。从Paul IrishThe Story of the HTML5 ShivJohn ResigHTML5 Shiv,再到Remy SharpHTML5 enabling script,说的是从document.creatElement(tagName)到Html5 Shiv的艰苦历程,也是我的艰苦历程。
creatElement()应用于creat element,creat 出来的 element 的属性类似于span,而且js部分必须放在该元素的前面,不能放在后面,因为浏览器必须在元素解析前知道这个元素,详见”createElement_x()可以创造html标签“。
经过了多年的研究,Paul Irish等人终于出成果,可以让IE支持html5。我也看到过很多文章涉及到html5 shiv能让IE系列兼容html5。或者是笔者愚钝,未能真正了解shiv。在我的少量实验里,发现有些标签是不兼容的,譬如<audio>和<video>。因为时间问题,我看的文章不算多,实验也不够多,因此未能确实地回答。待我更深入了解这方面知识时,再发表我的见解。
尽管我遇到以上的疑问,但是这种方法确实至少可以让部分标签兼容。
先插入jQuery文件,然后再插入以下代码,表示仅在IE浏览器下执行

<!–[if IE]>
<script src=”http://html5shiv.googlecode.com/svn/trunk/html5.js”></script>
<![endif]–>

 

谨记此文不能放于文件底部。如果不想影响载入速度,则用以下代码代替(笔者认为差不了多少)

(function(){if(!0)return;var e =”abbr,article,aside,audio,canvas,datalist,details,dialog,eventsource,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,time,video”.split(‘,’),i=e.length;while(i–){document.createElement_x(e[i])}})()

最后再css里面加这一段,使标签成块状
article,aside,dialog,footer,header,section,footer,nav,figure,menu{display:block}

 

网站开发开发大概分为前台和后端,前台又可以分为美工,交互设计,js编程。后端了解不多,前端的话,可以按如下思路学习系统学习:
基础知识
1. html + css 这部分建议在 www.w3school.com.cn 上学习,边学边练,每章后还有小测试。之后可以模仿一些网站做些页面。在实践中积累了一些经验后,可以系统的读一两本书,推荐《head first html 与 css 中文版》,这本书讲的太细了,我没能拿出耐心细读。你可以根据情况斟酌。
2. javascript 要学的内容实在很多,如果没有其他编程语言的基础的话,学起来可能要费些力,还是建议先在 w3school上学习。之后建议马上看《javascript语言精粹》,js是一门很混乱的语言,这本书能够帮助你区分哪些是语言的精华,哪些是糟粕,对于语言精华,应该深入学习。糟粕部分能看懂别人写的代码就行,自己就不用尝试了。
进阶
有了以上基础,就可以进行一般的静态网页设计,不过对于复杂的页面还学进一步学习。
1. css。必看《精通css》,看完这本书你应该对:盒子模型,流动,block,inline,层叠,样式优先级,等概念非常了解了。作为练习可以看下《css艺门之匠》这本书,它对标题,背景,圆角,导航条,table,表单等主题都有详细的介绍。
2. javascript。上面提到内容还不足以让你胜任js编程。在有了基础之后,进一步学习内容包括:
a) 框架。推荐jQuery,简单易用,我的第一web项目就是在w3school简单学习后,直接上手jQuery完成的,真的很难简单,很好用。jQuery适用环境有限,对于那些对性能要求很高的页面无法胜任。推荐了解一下 YUI 或百度的 tangram ,都很好用,学习方法也很简单,照着产品文档做几个页面就行了,不用面面俱到,以后遇到问题查文档就行了。框架可以帮你屏蔽浏览器的差异性,让你能更专注与web开发学习的精髓部分。
b) javascript 语言范式 。这个名字可能并不恰当,只是我找不到可以描述“面向对象”,“函数式”这个两个概念的概念。javascript不完全是一个面向对象的语言,它的很多设计理念都有函数编程语言的影子,甚至说如果你不用面向对象,完全可以把它理解成一门函数式编程语言。javascript的很多语言特性,都是因为他具有函数是语言的特点才存在的。这部分推荐先学习面向对象的基本理论,对封装,继承,多态等概念要理解,维基百科,百度百科会是你的帮手,另外推荐《object oriented javascript》,应该有中文版。对与函数式编程我了解的也不系统,不好多说,可以自己百度一下。
c) javascript 语言内部机制。必须弄清如下概念:js中变量的作用域,变量传递方式,函数的定义环境与执行环境,闭包,函数的四种调用方式(一般函数,对象的方法,apply,call),以及四种调用方式下,‘this’指向的是谁。这部分内容你会在《javascript语言精粹》中详细了解。另外,你必须理解json。
d) dom编程,这个web前端工程师的核心技能之一。必读《dom编程艺术》,另外《高性能javascript》这本书中关于dom编程的部分讲的也很好。
e) ajax编程,这是另一核心技术。ajax建议在网上查些资料,了解这个概念的来龙去脉,百度百科,维基百科上的内容就足够了。真正编程是很容易的,如今几乎所有框架都对ajax有良好的封装,编程并不复杂。
f) 了解浏览器差异性。这部分包括css和js两部分,浏览器差异内容很多,建议在实践中多多积累。另外对于浏览器的渲染模式,DOCTYPE等内容应该系统学习。
再进一阶
有了以上知识,对于大多数小型网站,你应该已经可以写出能够工作的代码了。但写出可以运行的代码,只是编程的最初级阶段。更高要求大概还有三方面:1易维护,2可测试,3高性能,如果页面流量有要求,那第四个就是,4低流量。
1. 易维护。对于页面你该理解‘样式’,‘数据’,‘行为’三者分离,对应的当然就是css,html,js。对于js代码,你最好了解设计模式,重构,MVC等内容。
2. 可测性。js代码可测性的主题,我正在研究,欢迎感兴趣的同学联系我,共同学习
3. 高性能。必读《高性能javascript》
4. 低流量。技巧性太强,非一朝一夕之功,不多说
补充
对于前段开发,核心部分基本就这些了,可以根据自己的兴趣爱好选择性学习以下内容。
1. 美工。 大公司都有专业的美工人员,不过如果爱好也可以了解
2. 交互设计。大公司依然有专业人士搞这些,不过如果爱好也可了解。推荐《简约至上》。
3. 后端。应该说前段工程师必须至少了解一门后端语言,不过如果爱好也可深入学习,入手难度比较低的应该是php了。这部分由可分为基于页面,基于框架两种。大型项目都是基于框架开发的,建议至少了解一个MVC框架,php的zend,asp.net 的 asp.net mvc等等太多了,好还框架的设计思想都大同小异。
4. flash。我并没有吧flash作为前端工程的核心技能之一,因为我不会,不过ActionScript应该和js大同小异,可以根据工作需要学习。不过我的原则是能不用就尽量不用,其实很多效果通过js,css都可以实现,完全不需要flash。而且随着html5的发展flash早晚会淘汰。
5. html5和css3 。html5的标准到现在还没有正式发布,不过目前几乎所有新的浏览器都已经开始支持,手机上就更是如此,建议学习,很好,很强大。

前端开发需要学习的内容,很多很杂,我在最开始学习的前两个月也是一片迷茫。一路走来,发现也走了些弯路。美工,交互设计,flash,js,html+css,后端,随便哪种技能,如果学的特别牛,都可以保证你拥有一个职业。想通吃,没个几年怕是不成。关键是选准自己的爱好,深入学习一项,面要铺开,但深度更重要。

 

转自:http://www.zhihu.com/question/19834302/answer/13108148

© 2012 Hedgehog Suffusion theme by Sayontan Sinha