网页编程/JavaScript
资源
- JavaScript 幻灯片
- jQuery 幻灯片
- w3schools.com 上的 JavaScript 教程
- w3schools.com 上的 JavaScript 参考
- w3schools.com 上的 jQuery 教程
- w3schools.com 上的 jQuery 参考
- jsfiddle
- jQuery
- JavaScript:理解奇怪的部分 - 前 3.5 个小时
JavaScript 是一种脚本语言。当附加到网页 (HTML) 时,它会被网络浏览器解释,并且可用于通过响应各种事件来操作网页。传统上,JavaScript 在客户端运行,以创建动态行为,例如表单验证,以使页面更具交互性。最近,JavaScript 越来越多地用于进行异步网络请求 (ajax) 并在服务器上处理网络请求 (node.js)。
Hello world 一个 JavaScript 程序是一个包含 JavaScript 代码的纯文本文件。当脚本文件(代码)加载时,JavaScript 解释器会按顺序解析文件中的语句并执行操作。如果语句定义了一个函数,解释器会记住定义,并且仅在调用该函数时执行该函数。以下 JavaScript 代码定义了一个函数,该函数使用 alert() 函数说“Hello”。当脚本加载时,它会执行一个语句,该语句调用 sayHello() 函数,然后它会执行函数定义中的内容。
function sayHello(){
alert("Hello!");
}
sayHello();
客户端 JavaScript 文件始终附加到 HTML 文件,这允许脚本访问表示页面的对象 (DOM)。通常,我们在脚本中首先做的事情是将函数附加到页面元素,以处理各种事件。以下 HTML 代码定义了一个按钮,并包含一个 demo.js 文件,通过处理事件使页面具有交互性。
<!DOCTYPE html>
<html>
<head>
<script src="demo.js" type="text/javascript"></script>
</head>
<body>
<button id="say_hello">Say Hello</button>
</body>
</html>
demo.js 文件包含以下内容。
window.onload = function(){
document.getElementById("say_hello").onclick = sayHello;
};
function sayHello(){
alert("Hello!");
}
在脚本中,隐式 window 对象用于将事件处理程序附加到 onload 事件,该事件在整个网页加载完毕时发生。事件处理程序被定义为一个匿名函数,这很好,因为该函数只被引用一次。在函数中,我们使用隐式 document 对象(表示页面)通过其 ID 找到按钮对象,并将 sayHello() 函数附加到按钮的 click 事件。请注意,前三行代码是一个语句,这就是为什么它需要以“;”结尾的原因。匿名函数在整个页面加载之前不会执行,sayHello() 函数在按钮被点击之前不会执行。我们必须等待页面加载完毕才能将事件处理程序附加到页面元素,因为元素必须存在才能引用它们。
脚本可以如下直接包含在 HTML 中。这可以,但它没有干净地分离内容(HTML)和行为(JavaScript),并阻碍了代码重用(你不能在其他页面上使用该脚本)。我将在以后的示例中使用这种样式,因为代码以紧凑的形式保留在一个文件中。
<!DOCTYPE html>
<html>
<body>
<button id="say_hello">Say Hello</button>
<script>
window.onload = function(){
document.getElementById("say_hello").onclick = sayHello;
}
function sayHello(){
alert("Hello!");
}
</script>
</body>
</html>
在前面的示例中,“document”指向一个 DOM(文档对象模型)对象,该对象表示网页。事实上,在浏览器在屏幕上绘制页面之前,它必须下载定义页面的 HTML 代码,然后在内存中为页面构建一个 DOM 对象。因此,页面的 DOM 对象是屏幕上渲染页面的底层数据结构。我们可以通过更改其 DOM 对象来修改屏幕上的页面,例如修改元素的内容或样式,添加新元素,以及删除元素。
在下一个示例中,我们通过更改段落的内容来说“Hello”,而不是使用弹出窗口,弹出窗口可能会令人讨厌。段落元素有一个名为 innerHTML 的属性,表示其内容。我们可以更改此属性来更改网页上段落的内容。
<!DOCTYPE html>
<html>
<body>
<button id="say_hello">Say Hello</button>
<p id="output"></p>
<script>
window.onload = function(){
document.getElementById("say_hello").onclick = sayHello;
};
function sayHello(){
var output = document.getElementById("output");
output.innerHTML = "Hello";
}
</script>
</body>
</html>
除了 onclick 事件之外,还有很多 其他事件 我们可以选择处理。大多数事件是由用户操作触发的。有时,我们希望以延迟或周期性的方式以编程方式触发事件。以下示例使用计时器来延迟函数的调用。setTimout() 函数接受两个参数:第一个是我们在计时器到期时要调用的函数的名称,第二个参数指定以毫秒为单位的延迟。
<!DOCTYPE html>
<html>
<body>
<p id="display">5</p>
<button id="start">Start</button>
<script>
document.getElementById("start").onclick =
function() {
var seconds = document.getElementById('display').innerHTML;
setTimeout(timesUp, seconds*1000);
};
function timesUp(){
alert('Time is up!');
}
</script>
</body>
</html>
对页面上的倒计时进行动画处理会更有意思,这意味着我们需要定期更新段落的内容。我们可以使用间隔设置计时器,并在计数达到零时清除它。下一个示例演示了这个想法。
<!DOCTYPE html>
<html>
<body>
<p id="display"></p>
<button id="start">Start</button>
<script>
var seconds = 10;
var timer;
document.getElementById('display').innerHTML=seconds;
document.getElementById("start").onclick =
function() {
timer = setInterval(update, 1000); // expires every second
};
function timesUp(){
alert('Time is up!');
}
function update(){
seconds = seconds - 1;
document.getElementById('display').innerHTML=seconds;
if (seconds==0){
clearInterval(timer);
timesUp();
}
}
</script>
</body>
</html>
我们可以使用这个想法构建一个完整的秒表。
<html>
<head>
<script src="stopwatch.js" type="text/javascript"></script>
</head>
<body>
<span id="mm">00</span>:<span id="ss">00</span>
<br/>
<button id="reset">reset</button>
<button id="start">start</button>
<script>
window.onload = function(){
document.getElementById("reset").onclick = reset;
document.getElementById("start").onclick = start;
};
var timer = null;
var minutes = 0;
var seconds = 0;
function reset(){
//alert("reset");
document.getElementById("ss").innerHTML = "00";
document.getElementById("mm").innerHTML = "00";
minutes = 0;
seconds = 0;
}
function start(){
timer = setInterval(update, 100);
document.getElementById("reset").disabled = "disabled";
document.getElementById("start").innerHTML = "stop";
document.getElementById("start").onclick = stop;
}
function stop(){
clearInterval(timer);
document.getElementById("reset").disabled = "";
document.getElementById("start").innerHTML = "start";
document.getElementById("start").onclick = start;
//alert("stop");
}
function update(){
seconds++;
if (seconds > 59){
seconds = 0;
minutes++;
}
if (seconds < 10){
document.getElementById("ss").innerHTML = "0"+seconds;
}else{
document.getElementById("ss").innerHTML = seconds;
}
if (minutes < 10){
document.getElementById("mm").innerHTML = "0"+minutes;
}else{
document.getElementById("mm").innerHTML = minutes;
}
}
</script>
</body>
</html>
jQuery 是一个 JavaScript 库,它扩展了“原生”JavaScript 的功能。它是最受欢迎的 JavaScript 库,因为它
- 简化了 DOM 操作,
- 允许使用 CSS 选择器进行元素选择,
- 解决了浏览器兼容性问题,
- 提供了函数式编程能力(将操作映射到一组元素),
- 通过从大多数函数返回调用者对象来提供方法链。
简单的语法规则可以在以下位置找到
常见的实用方法包括
一些有趣的结构包括
$(function () {
//code here
});
是以下内容的简写
$(document).ready(function(){
//code here
});
任何依赖于完全加载页面的代码都需要进入此函数。
以下是立即函数,它会立即运行,而无需等待文档准备就绪:在一个语句中定义和调用一个函数。
(function($){
//code here
})(jQuery);
jQuery 为选择 HTML 元素提供了更丰富的 API,几乎可以想象所有可能的方式。大多数选择器在 https://w3schools.org.cn/jquery/jquery_selectors.asp 中有描述,你可以在 https://w3schools.org.cn/jquery/trysel.asp 中找到一个全面的演示
jQuery 选择器会查找/选择一些 HTML 元素,我们可以在其上应用操作。
jQuery 通过提供我们可以使用的一组丰富的 方法来简化 DOM 操作。以下是此类方法的主要类别
- 获取内容和属性:当选择多个元素时,该方法会连接内容/属性并返回一个字符串。
- 设置内容和属性:我们可以将相同的值设置为所有选定的元素,或者使用回调函数根据元素在选定元素中的索引设置不同的值。
- 添加新内容或元素:$('<tag>') 方法可以创建具有任何标签名称的元素。
- 删除内容或元素: 可以使用选择器过滤要删除的元素。
以下示例在单击按钮时生成一个新的正方形(div)并将其添加到父容器中。
<!DOCTYPE html>
<html>
<head>
<style>
#box{
height: 200px;
width: 200px;
border: 1px solid black;
}
.square{
height: 20px;
width: 20px;
background-color: blue;
float: left;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$('button').click(function(){
var square = $('<div>').addClass('square');
$('#box').append(square);
});
});
</script>
</head>
<body>
<div id="box"></div>
<button id="button">add square</button>
</body>
</html>
操作样式信息的理想方法是定义 CSS 类,并通过将元素添加到类或从类中删除元素来更改元素的样式:获取和设置 CSS 类。
jQuery 还提供一个通用的 .css() 函数,用于直接操作单个 CSS 属性:css() 方法。当 css() 方法用一个参数调用时,它获取与参数名称相同的属性。当它用两个参数调用时,它使用第二个参数作为值来设置属性。当 css() 方法在一个选定元素集中调用时,它的行为会根据它是获取还是设置而有所不同:获取会返回第一个选定/匹配元素的属性值,而设置会更改所有选定元素的属性值。
jQuery 旨在响应 HTML 页面上的各种事件。
可以使用 jQuery 实现以下效果
jQuery UI 是使用 jQuery、HTML 和 CSS 构建的 GUI 小部件集合。可以在 jQuery 学习中心 找到入门指南。