全栈 - 21 Web基础 网页的关节JS

这是全栈数据工程师养成攻略系列教程的第二十一期:21 Web基础 网页的关节JS。

我们已经了解了Web三件套中的HTML和CSS,现在让我们来学习下最后的JS。

什么是JS

JS的全称是JavaScript,但是和Java关系并不大。之所以将JS比如网页的关节,是因为JS可以动态地操作DOM元素,例如插入和删除DOM元素,或者修改已有元素的样式和内容等。

JS是Web网页中的脚本编程语言,因此可以用JS来完成一些任务,例如实现一些数值计算,或者编写Web网页中的事件响应函数。Web网页中的事件包括鼠标悬浮、鼠标点击、鼠标滚动、键盘输入等,可以使用JS监听这些事件,并且在事件发生时进行相应的操作和处理,从而实现动态的页面更新和用户交互。

使用JS

使用JS的方法有两种:引入外部.js文件;直接在HTML中写JS。

如同引入外部.css文件一样,可以新建一个script.js文件,然后在里面编写JS代码,例如输入console.log("Hello World!");,然后在HTML的head中使用script标签引入,src属性指定了.js文件的相对路径。

<script src="script.js"></script>

运行写好的HTML文件,打开Chrome的开发者工具,在Console标签页中即可看到打印出来的Hello World!console.log()是JS提供的打印函数,好比Python的print,可以在Web网页中打印变量并进行调试。

如果是直接在HTML中写JS代码,则如同CSS的style标签一样,JS代码需要写在script标签之中,script标签可以放在HTML网页的任意位置,每条JS代码之后应当使用分号;结束。

<script>
console.log("Hello World!");
</script>

JS基础

在实际项目中我们一般很少直接写原生JS代码,因为已经有相当多的JS高级封装框架。这些框架在原生JS语法的基础上进一步开发,能够提供更方便更丰富的功能,例如后续章节中将介绍的JQuery,以及目前十分流行的Angular.jsReact.jsVue.js等前端框架。尽管如此,我们仍需要了解一些JS基础内容。

使用document.write()可以向body中写入DOM元素,以下代码向body中添加了一个h1标签。不过这一函数比较鸡肋,因为无法灵活地控制写入的内容和位置。

document.write('<h1>Hello World!</h1>');

和Python一样,JS也是一种弱变量类型的编程语言。使用关键字var声明一个变量,声明时无需指定其变量类型。和Python一样,JS中常用的基础变量类型包括数值(整数、浮点数)和字符串。//表示JS注释,如同Python中的#一样。

var a = 1; // 整数
var b = 1.1; // 浮点数
var c = 'Hello'; //字符串
console.log(a, b, c);

Python中用列表和字典分别来存储序列和键值对,在JS中同样有相应的数据结构,只不过是换了个名称,分别叫做数组和对象。它们的使用方法,包括声明、添加元素、访问元素、修改元素和删除元素等,和Python中的列表和字典都是大同小异的。

var d = []; // 数组
// 添加元素
// Python中的列表是append()
d.push(1);
d.push(2);
console.log(d);
// 打印下标为1,即第二个元素
console.log(d[1]);
// 数组长度,Python中是用len()
console.log(d.length);

 var e = {}; // 对象
 // 添加key和value
 e['k1'] = 1;
 e['k2'] = 2;
 e['k3'] = 'Hello';
 console.log(e);
 console.log(e['k1']);

在Chrome开发者工具的Console标签页中可以进行调试并观察打印信息,可以看到数组和对象分别是用Array[]Object{}表示的。

使用document.getElementById()可以根据给定的ID获取相应的DOM元素并返回一个DOM对象,假设我们在body里面写了一个h1标签:

<h1 id="title">标题内容</h1>

然后便可以在JS中通过document.getElementById()函数搜索并获取到这个h1。通过操作变量t,我们可以对相应的h1标签进行一些操作,例如获取其文本内容、修改其文本内容、向其中添加DOM元素、将其删除等。

var t = document.getElementById('title');
console.log(t);

再来看一下onclick,即DOM元素的鼠标点击响应事件。以下代码以button标签为例,当鼠标点击这一按钮时,刚才提到的h1标签文本将发生变化。HTML部分代码如下,可以将onclick当作DOM元素的属性来理解,当鼠标点击这一按钮时,将触发JS中定义的myFunc()函数。

<h1 id="title">标题内容</h1>
<button type="button" onclick="myFunc()">点我</button>

JS部分代码如下,首先我们需要定义myFunc()函数。JS使用function定义函数,和Python中的函数一样,也是将一些可重用的代码定义成函数,从而通过调用函数即可方便地执行一系列代码。JS函数也支持提供参数,从而根据提供的参数完成更灵活更复杂的功能。在DOM对象之后使用.可以访问其自带的一些内部属性和函数,例如innerHTML属性即DOM对象的HTML内容,可以设置为纯文本,也可以在其中包含HTML标签。编写代码并刷新网页,可以发现点击按钮之后,h1标签的内容将会被替换成两个p

function myFunc (argument) {
    var t = document.getElementById('title');
    t.innerHTML = '<p>按钮被点击了</p><p>按钮被点击了</p>';
}

因此,我们可以大概总结出JS动态操作DOM元素的流程。要么一开始直接在script中进行相关操作,要么通过onclick等属性绑定相应的事件响应函数,然后在响应函数里完成一些操作,从而实现动态交互的网页效果。

JS中的运算符包括算术运算符、比较运算符、赋值运算符、逻辑运算符等,和Python类似。

JS中也有条件和循环,分别使用小括号()和大括号{}显式指定判断条件和主体部分,而Python则是依靠适当的缩进来隐式指定。对于条件,需要注意,但凡出现if的地方都必须加上判断条件。JS循环以for循环为主,可以用来遍历数组和对象。

// 条件
if (a == 1) {
    console.log('a equal 1');
}
else {
    console.log('a not equal 1');
}

if (a == 1) {
    console.log('a equal 1');
}
else if (a == 2) {
    console.log('a equal 2');
}
else {
    console.log('a not equal 1, 2');
}

// 循环遍历数组
for (var i = 0; i < d.length; i++) {
    console.log(i, d[i]);
}
// 循环遍历对象
for (var key in e) {
    console.log(key, e[key]);
}

现在我们应该能逐渐体会到各种编程语言的一些通性,虽然不同的编程语言都有各自的特点和强项,但核心的编程思想都是相通和类似的,不同的无非只是一些使用上的细节。因此,熟练掌握一门自己最习惯使用的编程语言,同时了解其他多门辅助的编程语言,对于提高自己的理解能力和编程能力都是有很有帮助的。

除了以上提及的鼠标点击事件,JS中还支持很多其他类型的事件,例如鼠标悬浮、鼠标滚动、键盘输入等,我们将在后续介绍JQuery的时候再进行详细讨论。

补充学习

关于JS的更多内容可以参考以下链接,http://www.runoob.com/js/js-tutorial.html,里面提供了更为详细和系统的讲解,并结合大量实例代码加以巩固,推荐完整地浏览和尝试一遍。

掌握HTML、CSS、JS三件套之后,我们对Web基础内容应当具备了一个大致的了解。后续的学习内容包括一些进阶知识,例如基于JS、可以更加方便操作DOM元素的JQuery。Bootstrap是一款轻量的前端封装,包括CSS和JS两部分。前者提供了一些写好的CSS class,这样我们通过class的名称便可以快速使用写好的样式;后者基于JS提供了一些封装好的可以直接使用的网页动态功能,例如标签页、模态框和轮播等,如果我们自己使用原生的JS代码去实现这些动态效果,往往需要耗费更多时间和代码。

当然,前端所涉及的内容非常之多,新的好用的框架也层出不穷、不断迭代,例如之前提及的Angular.jsReact.jsVue.js等。Web后端可选的框架则更为丰富,基于PHP、Python、NodeJs、Java等都可以搭建Web后端。不断学习新的知识是好事,但是应当打好Web基础,并分别熟练掌握至少一种前端框架和后端框架,这样在后续通过Web网站实现动态交互的数据可视化时,才能得心应手地实现想要的效果。

视频链接:网页的关节JS

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容