avaScript 程序不能独立运行,它需要被嵌入 HTML 中,然后浏览器才能执行 JavaScript 代码。通过 <script> 标签将 JavaScript 代码引入到 HTML 中,有两种方式:
1.内部方式
内部方式是通过<script>标签包裹JavaScript代码,从而引入HTML页面中,示例代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript 基础 - 引入方式</title>
</head>
<body>
<!-- 内联形式:通过 script 标签包裹 JavaScript 代码 -->
<script>
alert('嗨,欢迎来传智播学习前端技术!')
</script>
</body>
</html>
2.外部形式
一般将 JavaScript 代码写在独立的以 .js 结尾的文件中,然后通过 <script>标签的 <src>属性引入,示例代码如下:
// demo.js
document.write('嗨,欢迎来传智播学习前端技术!')
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript 基础 - 引入方式</title>
</head>
<body>
<!-- 外部形式:通过 script 的 src 属性引入独立的 .js 文件 -->
<script src="demo.js"></script>
</body>
</html>
注意:如果 script 标签使用 src 属性引入了某 .js 文件,那么 标签的代码会被忽略!!!如下代码所示:
了执行Javascript,需要在HTML文件内以特定的方式书写JavaScript的代码,JavaScript的书写方法有多种,其执行的流程也各不相同:
此种嵌入方法无法操作<script>之后的DOM元素。因为<script>之后的DOM元素还未构造,因此在<script>标签内就无法取得位于其后的DOM元素。
此种嵌入方法可以指定defer、async属性。defer可以推迟执行,async可以异步执行。
此种嵌入方法在页面读取完后再对其执行,所以可以对所有的DOM元素操作。
<body onload="alert('hello')">
window.onload = function(){alert('hello');};
当window.onload事件触发时,页面上所有的DOM、样式表、脚本、图片、flash都已经加载完成了。
//window.onload不能同时编写多个。
//以下代码无法正确执行,结果只输出第二个。
window.onload = function(){
alert("test1");
};
window.onload = function(){
alert("test2");
};
//$(document).ready()能同时编写多个
//结果两次都输出
$(document).ready(function(){
alert("Hello World");
});
$(document).ready(function(){
alert("Hello again");
});
window.onload和body中onload也有些许区别:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script language="javascript">
window.onload = haha;
function haha(){console.log("window.onload");}
if(document.addEventListener){
function DOMContentLoaded(){
console.log("DOMContentLoaded");
}
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
}</script>
</head>
<body onload="console.log('bodyonload');">
<div id="div1">a</div>
</body>
</html>
在IE10和FireFox下,结果为 :
"DOMContentLoaded"
"bodyonload"
说明body中的onload会覆盖window.onload
在chrome下,结果为:
DOMContentLoaded
window.onload
bodyonload
然后,如果把javascript代码移到最下面,结果又会是什么样呢?
chrome和IE10、FireFox的结果竟然是一样的:
DOMContentLoaded
window.onload
IE 10、Fire Fox可以理解,window.on load和body中的 on load 谁在下面就是谁覆盖谁,只会执行后面的那个。
onload方法可能需要等待时间,而本方法可以在完成HTML解析后发生的事件,减少等待时间。
在chrome、IE10和FireFox中,执行结果是:DOMContentLoaded然后才是onload的输出。所以说一般情况下,DOMContentLoaded事件要在window.onload之前执行,当DOM树构建完成的时候就会执行DOMContentLoaded事件。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript" src="jquery2.js"></script>
<script language="javascript">
window.onload = haha;
function haha(){console.log(document.getElementById("div1"));}
if(document.addEventListener){
function DOMContentLoaded(){
console.log("DOMContentLoaded");
}
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
}
</script>
</head>
<body>
<div id="div1">a</div>
</body>
</html>
如果你是个jQuery使用者,你可能会经常使用$(document).ready();或者$(function(){}),这都是使用了DOMContentLoaded事件
5.1 使用原生js方法
动态创建script标签,并指定script的src属性
function loadJs(url, callback) {
var script = document.createElement('script');
script.type = "text/javascript";
if (typeof(callback) != "undefined") {
if (script.readyState) {
script.onreadystatechange = function() {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
}
} else {
script.onload = function() {
callback();
}
}
}
script.src = url;
document.body.appendChild(script);
}
loadJs("test.js", function() {
alert('done');
});
还可以使用同样的原理动态加载css文件,只不过插入的的父节点是head标签。
5.2 使用document.write/writeln()方式
该种方式可以实现js文件的动态加载,原理就是在重写文档流,这种方式会导致整个页面重绘。
document.writeln("<script src=\"http://lib.sinaapp.com/js/jquery/1.6/jquery.min.js\"></script>");
需要注意的是特殊字符的转义。
5.3 使用jQuery
使用getScript(url,callback)方法实现动态加载js文件
$.getScript('test.js',function(){
alert('done');
});
-End-
能在 JavaScript 中创建一个 HTML 元素吗? 答案是肯定的,你可以在 JavaScript 中创建一个元素让我们看看如何?
如果你想在 JavaScript 中创建一个 div 元素——
要在 JavaScript 中创建新元素,我们使用 document.createElement('div'),而不是 div,您可以分配任何 html 标签,例如 p、h1、h2、h3 等,如果您分配 p 标签,它将创建一个 p 标签。
现在,如果你想给它上一堂课,你可以做到——
为了给我们的新 div 一个类,我们使用 variablename.className = ‘class_name’ ,如上所示。
现在你也可以给它 id —
为了给 newdiv 一个 id,我们的代码是 variablename.id = ‘id_name’;
现在让我们看看我们的输出
现在,从上面的代码中,我创建了一个带有类容器和 id newElement 的 div 元素。
还有另一种方法可以在标签上设置 class 、 id 、 title 、 name ,让我们来看看。
在这里,我定义了 setAttribute() 并在括号内首先定义了标题,然后定义了标题的名称。 除了标题,您可以指定类、id 或任何名称
现在我们来看看我们的输出
您可以清楚地看到,在 div 标签内,我们的代码添加了标题,即“新 div”。
现在如果你想在 div 标签内添加内容怎么办? 例如,在我的 div 元素中,我想添加 Hello medium reader! 我怎样才能做到这一点? 下面来看看吧。
在上面的代码中,我使用 document.createTextNode() 将我的文本分配给变量内容,因此 TextNode 用于为我们的元素提供文本。
所以,我们已经成功地向我们的 div 元素添加了一个文本。
现在,最重要的是,如果您想将内容插入现有的 html 代码以便在浏览器中看到它,您可以通过 insertBefore(newNode, referenceNode) 来完成它的作用是在参考节点之前插入您的节点。
所以在这里我从上面的 html 代码中创建了一个带有类容器和 h1 标签的 div 元素。
现在,我定义了一个名为 maindiv 的变量,并将其分配给具有类容器的 div 元素,并定义了一个变量 h1 并为其分配了 h1 标记。
现在,为了插入我们的节点,我使用了 inserbefore(newNode, referenceNode) ,其中 newNode 是必须插入的节点,即我们的 newdiv ,参考节点是要在其之前插入 newNode 的节点,即我们的 h1 标记。
所以从上面的输出你可以看到我们已经成功地在浏览器中显示了我们的 div 内容。
JavaScript 是一种非常有效的语言,你可以在 JavaScritp 中做很多事情,这些只是它的基础。
谢谢你
*请认真填写需求信息,我们会在24小时内与您取得联系。