整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

如何零基础web(网页)前端学习路线?

何学习web(网页)前端? 在这里小编根据自身一些微薄的知识与网络大批量的收集,以下总结:

未入门问题

对于一个想入门,却还没有入门的爱好者,首先先了解前端是什么?用什么软件开发?有什么语言?有什么框架等。大概先做一个了解,小编觉得很有必要。

IT小牛

1、前端是什么?

总结就两个字,界面。包括网页、窗体、手机、微信等,只要说是用户能看见的东西,大概都是前端吧。

当然,你能看见,就会想这个是怎么做的呢?

其实前端你可以看成盖房子~html就充当了房子结构这部分,也是房子的基础。css呢,就好比咱们房子的装修,墙面什么颜色,什么风格,什么地板…这些给房子改变风格,样式的就是cssjavascript呢,就好比这个房子的功能,房子需要制冷吧,需要暖气吧,也需要上下水吧。这些功能性的就相当于是javascript例子可能不是很恰当,只是帮助大家有个初步的认识~

2、软件开发

作为一个优秀的前端工程师当然是任何软件都是能轻松驾驭的(这里说的是能开发前端的软件),当然也会忠于一款到两款的开发软件。作为一个还没入门的工程师,可以选择比较老牌,也就是功能齐全一点总是没错的。Dreamweaver、notepad++都是可以的。如果你购买的书籍,那么就是数据介绍的也不错。

3、编码了解

前端开发概况、代码入门

作为一个前端工程师,页面基本结构、文档声明、编码声明、css语法、style属性、link和style标签、id属性、基本样式、Border 、Background、 Font、盒模型、文本设置…常用标签集合header、article、aside、section、footer、nav、h1-h6、p、ul、ol、li、img、dl、dt、dd…绝对路径、相对路径、标签语义化、标签嵌套规范、SEO…等等,这些或多或少你要掌握,有些可能你不会用到,但知道一点也是多编程近一步理解。

常用选择器&标签类型划分

d、class、类型选择、包含选择、群组选择、通配符、选择器优先级、标签样式初始化订制方案、超链接及伪类划分、标签类型划分及特性、inline、inline-block、block..

浮动进阶

浮动的作用、浮动的特性、文档流、浮动的各种问题、clear、BFC(块级格式化上下文)、触发BFC的条件、Haslayout、Haslayout的触发条件…

定位

relative相对定位、Absolute绝对定位、Absolute绝对定位、Fixed 固定定位、inherit 继承、static静态定位、默认值、zIndex层级问题、margin负值、透明度…

表格和表单

表格标签、表格样式重置、单元格合并、表单元素、表单相关的属性操作、表单默认样式初始…

4、进阶编码

了解了初步的编码,但作为一个工程师还是不够的,还需要更深层了解。

兼容性问题处理

兼容性的问题,小编在这里不得不说,这是前端的一个坑,介于现在浏览器大多数都很人性化了,只是部分没有升级或还喜欢用IE6、7浏览器的用户,有些头疼。兼容性问题总结、浮动在IE6,7下的各种问题、表单在低版本IE的问题、处理低版本IE对新增标签的支持、CssHack、条件注释语句、PNG问题、透明度的问题、固定定位在IE低版本的处理方式…

随便还说一句,项目不大,IE浏览器就放弃吧。

整站进阶

样式规划、favicon、Css Sprite、Data URI、隐藏元素、测试工具使用、滑动门、等高布局、三列布局、未知宽高图片在容器内水平垂直居中、文本水平垂直居中、多行文本水平垂直居中…

css3入门

transition、属性选择器、nth-of-type、nth-child、backgroundSize、box-sizing、圆角,盒模型阴影、文字阴影、rgba、表单高级、H5表单新增属性、E:not(s)、E:target、E::selection、background-clip…

移动端布局

测试环境Emulation、viewport、window.devicePixelRatio、物理分辨率、Media Queries、rem、window.screen、移动端布局相关问题、window.deviceorientationevent、横竖屏判断…

Animation和Transform

浏览器前缀、keyFrames、Animation调用、播放次数设置、动画偶数次调用顺序、Animation的问题、无缝滚动、动画播放|暂停、rotate旋转、deg、skew斜切、scale缩放、translate位移、transform-origin、transform的执行顺序问题…

Bootstrap前端开发框架 (或其他框架)

Html语法规范、CSS语法规范、Less 和 Sass 中的嵌套、class 命名、选择器、Normalize.css、栅格系统、排版、代码、响应式工具…

5、项目实战

等你以上问题都大概知道了,或者还能学的更多,那么恭喜你,你已经入门了,接下来就是检验自己的学习成果的时候。

做一个PC端的企业网站布局(例:sony官网)PC端的电商类网站布局(例:京东商城)移动端常见页面布局(例:微信活动页/商城)

小编认为学习前端可能又分为下面几个阶段

第一阶段——HTML标签的学习

超文本标记语言(HyperText Mark-up Language 简称HTML),“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。

html是一个网页的骨架,就好比是盖房子的结构~这也是前端页面的基础。试着想一下,如果一个房子连砖头和水泥都没有,后面的步骤又有什么意义呢?所以我们必须完全掌握HTML的基本结构和常见的标签,属性。有了一个好的开始,距离成功已经一小半啦

ok~学习完成html后,我们来到第二阶段——css  

去给我们的房子装修一番吧~

第二阶段——CSS的学习

CSS,层叠样式表——(Cascading Style Sheets),是能够真正做到网页表现与内容分离的一种样式设计语言。相对于传统HTML的表现而言,CSS能够对网页中的对象的位置排版进行像素级的精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力,并能够进行初步交互设计,是目前基于文本展示最优秀的表现设计语言。CSS能够根据不同使用者的理解能力,简化或者优化写法,针对各类人群,有较强的易读性。

CSS看似比较繁杂,其实只要掌握了CSS中的盒子模型、定位、以及页面布局,就基本上掌握了大半啦

这时我们就以及能够对网页中各个元素进行精准的排版,做出符合我们意愿的网页啦!

关于CSS的各种属性,我们还是可以参考学习HTML那样。可以说CSS的属性几乎完全是语义化的。我们需要改变边框,那就是“border”,那我们需要右侧边框做一些改变,那就是“border-right”。很明显,接下来按照我们的需求还有“右边框的宽度——border-right-with”,”右边框颜色——border-right-color”等等等,诸如此类~

完全就是我们需要什么,只要凭着需求去寻找。

说完装修,我们终于要给房子打造一些功能啦~follow me~

第三阶段——JavaScript

JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。

简单来说,javascript是一个可以运行在浏览器上面的语言(当然现在基于一些库/框架已经远不只是在浏览器上了),它可以操控浏览器,让浏览器听从我们的命令。这有点像一个电视剧和遥控器,而javascript就是我们的遥控器。浏览器根据javascript的指令,做出相应的反馈。比如操作DOM(也可以理解成为操作HTML),可以操作CSS。有了javascript就可以让我更加灵活&动态的操控HTML,CSS.

严格来说、HTML和CSS还算不上真正的“语言”,而javascript却是如假包换的脚本型语言,既然是语言,那就会有字符串,数组,对象等等。而我们的javascript可以处理这些与数据有关的工作,比如给数组排个序,去个重等等。而我们依靠javascript可以做些什么呢?网页上常见的轮播图,网站的注册功能,提交我们的留言,刷新获取新闻等等。

当然,我们强大的javascript远不止此啦,以后再为大家深入介绍~

然而因为历史原因,比如我们灰常“尊敬”的 IE 浏览器~出了一套自己的javascript标准,没有和主流javascript标准兼容啊!!作为一个前端er是不是应该把更多精力用在有意义的地方呢,而不是解决兼容。。。

所以,似乎我们还需要一个利器,来让我们更快速的开发~没有错,这就是我们的——jQuery!

第四个阶段——jQuery

jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多)。jQuery在2006年1月由美国人John Resig在纽约的barcamp发布,吸引了来自世界各地的众多JavaScript高手加入,由Dave Methvin率领团队进行开发。如今,jQuery已经成为最流行的javascript库,在世界前10000个访问最多的网站中,有超过55%在使用jQuery。

如果继续用盖房子做例子,jQuery更像是一个装修队。我们只需要关注我们的房子设计本身,把我的想法,理念告知这个装修队,让它来给我们处理那些杂七杂八的事情。比如会不会吵到邻居?怎么协调物业?干活总得有人手的,对吧…  

jQuery的优点我就不挨个说啦,一句话,jQuery是你更上一层楼的利器,也是我们前端er一大利器!

这里给大家分享一些css小技巧:

  1. 使用reset.css火狐和IE这两种不同的浏览器,在绘制CSS样式方法上截然不同。这种情况下,使用reset.css重置所有的基本样式会让你得到一个全新的空样式表。(可以去网上找一下,很多的)

  2. CSS缩写CSS缩写简化了你的CSS代码,更重要的是,它让你的代码更加整洁易懂。

    不是像这样创建CSS

    css 代码效果预览

1
2
3
4
5
6
7.header {}

而是像这样创建CSS

css 代码效果预览

1
2
3.header {}
  1. 理解class和id这两个选择器总是让初学者感到迷惑。在CSS中,Class和ID分别用点“.”和井号“#”来标识。简单来说id就是用来标识那些单独不重复的样式,而class是可以重复使用的。

  2. 实用的

  3. 也叫链接列表,在与或正确搭配的时候非常好用,尤其是用在导航菜单样式上。

  4. 少用多用

    CSS最大的优势之一是使用

    达到样式上的灵活多变。不同于,里的内容不会 被锁在单元格中。可以说几乎所有的表格布局都可以在

    和样式的正确使用下完成。当然,有大量表格内容时,还是用 吧。

  5. CSS调试工具在设计CSS时,能够得到页面布局的预览对于优化CSS样式和纠错是很有帮助的。这里有一些免费的CSS调试工具推荐给你,你可以把它装在浏览器上:比如FireFox Web Developer、DOM Inspector、Firebug等

  6. !Important所有被!important 标记的样式,即使它后来被重写,浏览器也只会采用被标记的那条。

    css 代码效果预览

1
2
3
4.page {}

比如上面的例子,因为background-color:blue 被标记为!important ,即使后来有把背景改成红色的语句,也只采用被标记的那条。!important 用来强制使一个样式避免在之后的编码中被修改,遗憾的是IE不支持。牢记以上小技巧,也许你的css技能突然就起飞了呢?

学习前端需要方法,更需要一颗平常心,不要把前端想的多难,需要吃什么苦。。。既然学习这么痛苦,为什么不快乐一点学呢?~希望大家可以成为一个优秀的前端er!

转载请注明出处:IT小牛(http://www.toutiao.com/c/user/60408663522/#mid=1567512738080770)

部分资源来源于网络,仅供娱乐交流,不以盈利为目的,不构成商业目的使用,相关版权为作者原有。

前web前端工程师日均岗位缺口已经超过50000,随着互联网+的深入发展,html5作为前端展示技术,市场人才需求量将呈直线上涨。

Web前端工程师的岗位职责是利用HTML、CSS、Java、DOM等各种web技能结合产品的界面开发,制作标准化纯手工代码,并增加交互功能,丰富互联网的Web开拓,致力于改进用户体验。现如今,Web前端工程师已经成为各大互联网公司不可或缺的热门职位,从业者队伍日渐庞大,这其中不乏零基础学习者和转行人士。为了方便大家系统而全面的掌握前端基础知识,小编特意整理了web前端开发入门学习线路图,涵盖20大实战项目的知识点详细讲解,希望对大家的学习有所帮助。



项目一:PC端网站布局

所含知识点:HTML基础,CSS基础,CSS核心属性,CSS样式层叠,继承,盒模型,容器,溢出及元素类型,浏览器兼容与宽高自适度,定位,锚点与透明,图片整合,表格,CSS属性与滤镜

项目二:HTML5+CSS3基础项目

所含知识点:HTML5新增的元素与属性,表单域增强元素,CSS3选择器,文字字体相关样式,CSS3位移与变形处理,CSS3 2D转换与过度动画,CSS3 3D转换与关键帧动画,弹性盒模型,媒体查询,响应式设计

项目三:WebApp页面布局项目

所含知识点:移动端页面设计规范,移动端切图,文字流式/控件弹性/图片等比例/特殊设计的100%布局,等比缩放布局,viewport/meta,rem/vw的使用,flexbox详解,移动web特别样式处理(reset, 1px border, 高清图片)

项目四:原生Java交互功能开发项目

所含知识点:基本语法,循环语句,函数与数组,String与Date,BOM与DOM,事件,拖拽效果,cookie存储,正则表达式,Ajax,面向对象基础,运动与游戏开发

项目五:面向对象进阶与ES5/ES6应用项目

所含知识点:Promise/A+,设计模式(观察者模式等),原型链,构造函数,执行上下文栈与执行上下文,变量对象与活动对象,作用域链,闭包,this,ES5,ES6

项目六:Java工具库自主研发项目

所含知识点:DOM库,事件库,AJAX库,原型和继承库,MVVM核心库,基于SPA的路由库

项目七:jQuery经典交互特效开发

所含知识点:时间轴特效,tab页面切换效果,网页定位导航特效,滑动门特效,焦点图轮播特效,导航条菜单效果,瀑布流特效,弹出层效果,倒计时效果,抽奖效果

项目八:PHP+MySQL后端基础项目

所含知识点:PHP,MySQL,HTTP(s)协议详解,Ajax进阶、跨域与Defered,Apache与Nginx 环境搭建与配置,接口的定义,Mock数据,Restful,前后端联调,前端安全(XSS,CSRF,JSON注入)

项目九:前端工程化与模块化应用项目

所含知识点:Gulp,Webpack,NPM,Git/SVN,CommonJS,AMD,CMD,ES6模块化

项目十:PC端全栈开发项目

所含知识点:大首页、列表页与详情页展示与交互特效、搜索、登录与注册、购物车、jQueryUI 与 jQuery EasyUI、Bootstrap(ACE)、Highcharts/Echarts、ArtTemplate、Velocity、Smarty、云平台系统前端

项目十一:应用Vue.js开发WebApp项目

所含知识点:Vue.js基础,模块化,单文件组件,路由,与服务器通信,状态管理,单元测试与生产发布,服务端渲染SSR与Nuxt.js,基于Vue.js企业级项目开发(Mint UI, Element UI)

项目十二:应用React.js开发WebApp项目

所含知识点:ReactJS基础,JSX语法,组件,flux+Redux,React,Router路由,动画效果,基于React 企业级项目研发( Antd, Antd Mobile)

项目十三:应用Angular开发WebApp项目

所含知识点:Type 基础与进阶,开发环境配置,Hello World,架构、模块与组件,模板,元数据、数据绑定与数据显示,表单,服务与指令,依赖注入,路由,Ionic 3 MUI框架

项目十四:微信公众号开发

所含知识点:初识微信公众号,订阅号的基本功能,使用百度BAE实现代码的快速上线,使用Git完成线上代码部署,公众号开发权限及功能接入,微信JSSDK接口API,微信场景项目开发与接入

项目十五:微信小程序开发

所含知识点:微信小程序初探,小程序入门必学,小程序组件体验,小程序大功能,项目实战带你征服小程序

项目十六:React Native

所含知识点:React Native 初探,React Native 项目导航,React Native 项目文本框,React Native 项目滚动分页,React Native 项目第三方登录,React Native 其他组件

项目十七:各类混合应用开发

所含知识点:自主原生Navtive Hybrid(iOS、Android),第三方Hybrid框架Cordova/Phone gap,第三方Hybrid框架MUI + HTML5+

项目十八:NodeJS全栈开发

所含知识点:

(1)Node.js基础项目——NodeJS介绍,开发环境搭建,模块与包管理工具,CommonJS模块,URL网址解析,QueryString参数处理,HTTP模块,HTTP小爬虫,request方法,事件 events模块,文件 fs模块,Stream 流模块,原生路由与参数接收,读取图片文件,npm s,Yarn 与 PM2

(2)MongoDB——MongoDB介绍与环境搭建,数据库常用命令,Collection聚集集合,document文档操作,聚集集合查询,NodeJS连接MongoDB

(3)GraphGL——GraphQL初探:从REST到GraphQL,GraphGL安装,准备数据源,搭建GraphQL服务器,数据查询

(4) Express——express 介绍,安装和创建基于Express的项目,Express 4.1x 初始化项目详解,路由简介,模板引擎EJS,模板引擎Pug(Jade)

(5)Koa——Koa入门、Koa应用、中间件、Context、async await、请求与响应

(6)测试框架mocha——搭建框架、断言assert、项目测试、运行多个测试

(7)socket 即时通信项目——Socket简介和通讯流程,基于net模块实现socket,WebSocket,Socket.io

项目十九:Node.js高级全栈项目

所含知识点:基于Vue+Node+MongoDB+微信的高级全栈项目开发

项目二十:大数据可视化

所含知识点:数据可视化入门,数据可视化基础,零编程工具使用:ChartBlocks、Infogram、plotly、Raw、Tableau,D3.js详解,D3.js 入门,D3.js 高级应用,D3.js 应用工具:NVD3、n3,charts,Highcharts,FusionCharts,Polymaps

在前端学习的起步阶段,最重要的就是要有明确目标和合理的学习规划,为此小编特别为大家总结了web前端基础学习阶段的四大学习要点,希望能让大大家的学习变得更加高效:

一、基本知识的掌握 在我们梳理的知识架构中,按照我们分析的两个维度里最前置的、最浅显的部分,作为打基础的阶段,必须要在这个过程中更多投入到实践中去,我们通常做的多了、熟练了,就认为这部分知识和内容掌握。

二、常用工具的掌握 对于常用工具的掌握应该掌握一些有大公司或专业团队背景的流行工具,这些工具的熟练掌握能够提升专业度、职业度,同时,能提升我们的工作效率。

三、沟通技巧的掌握 在国内,技术人员通常都是自己制定方案、自己执行方案,在执行过程中又缺乏相关产品、交互设计等人员的沟通,大多是在自己的思路贯彻下进行开发,久而久之,我们习惯于信任自己的观点、在自己的视角看问题,对于挑战总是百般地“据理”力争。我们需要更多提升的是,如何在对方的视角看问题、如何在用户的视角看问题。

四、良好的开发习惯 开发习惯是养成的,一旦有不好的习惯,对于将来去修正带来的将是很大的麻烦,培养良好的开发习惯一定要从起步时做起,例如:写代码之前先分析、先写文档、先写注释等等。

最后希望大家通过自己的努力与学习,都能成为一名能力全栈的web前端工程师。

浏览器访问网站时,页面各不相同,你有没有想过它为何会呈现这个样子呢?本节中,我们就来了解一下网页的基本组成、结构和节点等内容。

网页的组成

网页可以分为三大部分——HTML、CSS和JavaScript。如果把网页比作一个人的话,HTML相当于骨架,JavaScript相当于肌肉,CSS相当于皮肤,三者结合起来才能形成一个完善的网页。下面我们分别来介绍一下这三部分的功能。

1. HTML

HTML是用来描述网页的一种语言,其全称叫作Hyper Text Markup Language,即超文本标记语言。网页包括文字、按钮、图片和视频等各种复杂的元素,其基础架构就是HTML。不同类型的文字通过不同类型的标签来表示,如图片用img标签表示,视频用video标签表示,段落用p标签表示,它们之间的布局又常通过布局标签div嵌套组合而成,各种标签通过不同的排列和嵌套才形成了网页的框架。

在Chrome浏览器中打开百度,右击并选择“检查”项(或按F12键),打开开发者模式,这时在Elements选项卡中即可看到网页的源代码,如图2-9所示。

图2-9 源代码

这就是HTML,整个网页就是由各种标签嵌套组合而成的。这些标签定义的节点元素相互嵌套和组合形成了复杂的层次关系,就形成了网页的架构。

2.CSS

HTML定义了网页的结构,但是只有HTML页面的布局并不美观,可能只是简单的节点元素的排列,为了让网页看起来更好看一些,这里借助了CSS。

CSS,全称叫作Cascading Style Sheets,即层叠样式表。“层叠”是指当在HTML中引用了数个样式文件,并且样式发生冲突时,浏览器能依据层叠顺序处理。“样式”指网页中文字大小、颜色、元素间距、排列等格式。

CSS是目前唯一的网页页面排版样式标准,有了它的帮助,页面才会变得更为美观。

图2-9的右侧即为CSS

就是一个CSS样式。大括号前面是一个CSS选择器,此选择器的意思是首先选中id为head_wrapper且class为s-ps-islite的节点,然后再选中其内部的class为s-p-top的节点。大括号内部写的就是一条条样式规则,例如position指定了这个元素的布局方式为绝对布局,bottom指定元素的下边距为40像素,width指定了宽度为100%占满父元素,height则指定了元素的高度。也就是说,我们将位置、宽度、高度等样式配置统一写成这样的形式,然后用大括号括起来,接着在开头再加上CSS选择器,这就代表这个样式对CSS选择器选中的元素生效,元素就会根据此样式来展示了。

在网页中,一般会统一定义整个网页的样式规则,并写入CSS文件中(其后缀为css)。在HTML中,只需要用link标签即可引入写好的CSS文件,这样整个页面就会变得美观、优雅。

3. JavaScript

JavaScript,简称JS,是一种脚本语言。HTML和CSS配合使用,提供给用户的只是一种静态信息,缺乏交互性。我们在网页里可能会看到一些交互和动画效果,如下载进度条、提示框、轮播图等,这通常就是JavaScript的功劳。它的出现使得用户与信息之间不只是一种浏览与显示的关系,而是实现了一种实时、动态、交互的页面功能。

JavaScript通常也是以单独的文件形式加载的,后缀为js,在HTML中通过script标签即可引入,例如:

<script src="jquery-2.1.0.js"></script>

综上所述,HTML定义了网页的内容和结构,CSS描述了网页的布局,JavaScript定义了网页的行为。

网页的结构

我们首先用例子来感受一下HTML的基本结构。新建一个文本文件,名称可以自取,后缀为html,内容如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>This is a Demo</title>
    </head>
    <body>
        <div id="container">
            <div class="wrapper">
                <h2 class="title">Hello World</h2>
                <p class="text">Hello, this is a paragraph.</p>
            </div>
        </div>
    </body>
</html>

这就是一个最简单的HTML实例。开头用DOCTYPE定义了文档类型,其次最外层是html标签,最后还有对应的结束标签来表示闭合,其内部是head标签和body标签,分别代表网页头和网页体,它们也需要结束标签。head标签内定义了一些页面的配置和引用,如:

<meta charset="UTF-8">

它指定了网页的编码为UTF-8。

title标签则定义了网页的标题,会显示在网页的选项卡中,不会显示在正文中。body标签内则是在网页正文中显示的内容。div标签定义了网页中的区块,它的id是container,这是一个非常常用的属性,且id的内容在网页中是唯一的,我们可以通过它来获取这个区块。然后在此区块内又有一个div标签,它的class为wrapper,这也是一个非常常用的属性,经常与CSS配合使用来设定样式。然后此区块内部又有一个h2标签,这代表一个二级标题。另外,还有一个p标签,这代表一个段落。在这两者中直接写入相应的内容即可在网页中呈现出来,它们也有各自的class属性。

将代码保存后,在浏览器中打开该文件,可以看到如图2-10所示的内容。

图2-10 运行结果

可以看到,在选项卡上显示了This is a Demo字样,这是我们在head中的title里定义的文字。而网页正文是body标签内部定义的各个元素生成的,可以看到这里显示了二级标题和段落。

这个实例便是网页的一般结构。一个网页的标准形式是html标签内嵌套head和body标签,head内定义网页的配置和引用,body内定义网页的正文。

节点树及节点间的关系

在HTML中,所有标签定义的内容都是节点,它们构成了一个HTML DOM树。

我们先看下什么是DOM,DOM是W3C(万维网联盟)的标准,其英文全称Document Object Model,即文档对象模型。它定义了访问HTML和XML文档的标准:

W3C文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。

W3C DOM标准被分为3个不同的部分。

l 核心DOM: 针对任何结构化文档的标准模型。

l XML DOM:针对XML文档的标准模型。

l HTML DOM:针对HTML文档的标准模型。

根据W3C的HTML DOM标准,HTML文档中的所有内容都是节点。

l 整个文档是一个文档节点;

l 每个HTML元素是元素节点;

l HTML元素内的文本是文本节点;

l 每个HTML属性是属性节点;

注释是注释节点。

HTML DOM将HTML文档视作树结构,这种结构被称为节点树,如图2-11所示。

图2-11 节点树

通过HTML DOM,树中的所有节点均可通过JavaScript访问,所有HTML节点元素均可被修改,也可以被创建或删除。

节点树中的节点彼此拥有层级关系。我们常用父(parent)、子(child)和兄弟(sibling)等术语描述这些关系。父节点拥有子节点,同级的子节点被称为兄弟节点。

在节点树中,顶端节点称为根(root)。除了根节点之外,每个节点都有父节点,同时可拥有任意数量的子节点或兄弟节点。图2-12展示了节点树以及节点之间的关系。

图2-12 节点树及节点间的关系

本段参考W3SCHOOL,链接:http://www.w3school.com.cn/htmldom/dom_nodes.asp。

选择器

我们知道网页由一个个节点组成,CSS选择器会根据不同的节点设置不同的样式规则,那么怎样来定位节点呢?

在CSS中,我们使用CSS选择器来定位节点。例如,上例中div节点的id为container,那么就可以表示为#container,其中#开头代表选择id,其后紧跟id的名称。另外,如果我们想选择class为wrapper的节点,便可以使用.wrapper,这里以点(.)开头代表选择class,其后紧跟class的名称。另外,还有一种选择方式,那就是根据标签名筛选,例如想选择二级标题,直接用h2即可。这是最常用的3种表示,分别是根据id、class、标签名筛选,请牢记它们的写法。

另外,CSS选择器还支持嵌套选择,各个选择器之间加上空格分隔开便可以代表嵌套关系,如#container .wrapper p则代表先选择id为container的节点,然后选中其内部的class为wrapper的节点,然后再进一步选中其内部的p节点。另外,如果不加空格,则代表并列关系,如div#container .wrapper p.text代表先选择id为container的div节点,然后选中其内部的class为wrapper的节点,再进一步选中其内部的class为text的p节点。这就是CSS选择器,其筛选功能还是非常强大的。

另外,CSS选择器还有一些其他语法规则,具体如表2-4所示。

表2-4 CSS选择器的其他语法规则

另外,还有一种比较常用的选择器是XPath,这种选择方式后面会详细介绍。

本节介绍了网页的基本结构和节点间的关系,了解了这些内容,我们才有更加清晰的思路去解析和提取网页内容。