整合营销服务商

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

免费咨询热线:

JavaScript代码嵌入HTML的方法、及两者的在执行流程上的细微区别

了执行Javascript,需要在HTML文件内以特定的方式书写JavaScript的代码,JavaScript的书写方法有多种,其执行的流程也各不相同:

1 <script>标签嵌入

此种嵌入方法无法操作<script>之后的DOM元素。因为<script>之后的DOM元素还未构造,因此在<script>标签内就无法取得位于其后的DOM元素。

2 读取外部JavaScript文件

此种嵌入方法可以指定defer、async属性。defer可以推迟执行,async可以异步执行。

3 onload嵌入

此种嵌入方法在页面读取完后再对其执行,所以可以对所有的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 谁在下面就是谁覆盖谁,只会执行后面的那个。

4 DOM ContentLoaded嵌入

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 动态载入JavaScript文件

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-

入排序概述

插入排序是将数组分为待排序和已排序两个区间。依次从待排序区间中取出一项,用该项跟已排序区间项逐个对比,通过位移来实现插入到对应位置的排序方式。插入排序平均时间复杂度是:O(n^2)

步骤是:

  1. 先建立两个循环,外循环用于遍历待排序区间,内循环用来遍历已排序区间。
  2. 从待排序中按顺序取出一项暂存起来,将该项自右往左与已排序项逐个对比,当遇到比自己大的项(表示升序)时,将该位置右移1位。
  3. 再将待排序区间里右移后空出来的位置赋值为暂存项。此时已排序区间增加了一项,待排序区间减少了一项,继续第2步直到待排序遍历完成。

插入排序实现

插入排序有多种实现方式,这里介绍常见的3种:

1、通用实现方式,自左往右遍历待排序数组,再从当前的左侧位置开始自右往左循环已排序数组,再逐个比较和移动被比较项,最后将当前项填入到空缺位置上。

2、利用数组splice方法,类似打扑克牌,先拿出要排序的牌,然后找准位置插入。这种方式利用了原生API,减少了数组反复移动位置的操作。性能上之前差不多。

3、新建数组法与splice结合法,这种方式会多建立一个数组,也就会多占用一个空间,但理解起来最容易,也利用了JS语言的特性。

插入排序通俗说明

插入排序与冒泡、选择都是比较简单好懂的排序方式,性能上也差不多。插入排序通俗来讲就像打扑克牌排序,你抓了一手牌之后。假如是:2、1、5、3、4,你会:

1、先把牌分成两组,假定左侧第一张牌为一组(标识A,这时只有2),其他牌为另外一组(标识B,包括1、5、3、4)。

2、从B组里面从左起选择第一张牌(位置空出等待填充),也就是1,拿这张牌与A组里面从右往左挨个对比,当遇到比这张牌还小时就在这个位置停留下来(如果A组全部比这张牌都大那就在A组最前面停留下来,如果A组里没有比这张牌大的就在当前位置停留)。

3、然后将A组里比这张牌(也就是1)大的牌逐个往右移动1位,原B组空出位置被填充,此时刚才停留的位置空出,将1这张牌插入在这里。这时候A组增加一个数字,变为:1、2,B组减少1个,变为:5、3、4。

4、移动指针,继续指向B组的第一个,也就是5。用5这张牌重复第二部,即拿5去跟A组自右往左逐个比较,然后插入到A组。此时A组:1、2、5,B组:3、4。

5、将B组里数字按照第二部重复操作,直到B组为空时整个循环结束。此时A组为:1、2、3、4、5。

HTML 使用超级链接与网络上的另一个文档相连。几乎可以在所有的网页中找到链接。点击链接可以从一张页面跳转到另一张页面。

HTML 链接

如何在HTML文档中创建链接。

(可以在本页底端找到更多实例)

HTML 超链接(链接)

HTML使用标签 <a>来设置超文本链接。

超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。

当您把鼠标指针移动到网页中的某个链接上时,箭头会变为一只小手。

在标签<a> 中使用了href属性来描述链接的地址。

默认情况下,链接将以以下形式出现在浏览器中:

  • 一个未访问过的链接显示为蓝色字体并带有下划线。

  • 访问过的链接显示为紫色并带有下划线。

  • 点击链接时,链接显示为红色并带有下划线。

注意:如果为这些超链接设置了 CSS 样式,展示样式会根据 CSS 的设定而显示。

HTML 链接语法

链接的 HTML 代码很简单。它类似这样::

<a href="url">链接文本</a>

href 属性描述了链接的目标。.

实例

<a href="http://www.runoob.com/">访问菜鸟教程</a>

上面这行代码显示为:: 访问菜鸟教程

点击这个超链接会把用户带到菜鸟教程的首页。

提示: "链接文本" 不必一定是文本。图片或其他 HTML 元素都可以成为链接。

HTML 链接 - target 属性

使用 target 属性,你可以定义被链接的文档在何处显示。

下面的这行会在新窗口打开文档:

实例

<ahref="http://www.runoob.com/"target="_blank">访问菜鸟教程!</a>

HTML 链接- id 属性

id属性可用于创建在一个HTML文档书签标记。

提示: 书签是不以任何特殊的方式显示,在HTML文档中是不显示的,所以对于读者来说是隐藏的。

实例

在HTML文档中插入ID:

<a id="tips">有用的提示部分</a>

在HTML文档中创建一个链接到"有用的提示部分(id="tips")":

<a href="#tips">访问有用的提示部分</a>

或者,从另一个页面创建一个链接到"有用的提示部分(id="tips")":

<a href="http://www.runoob.com/html/html-links.html#tips">

访问有用的提示部分</a>

基本的注意事项 - 有用的提示

注释: 请始终将正斜杠添加到子文件夹。假如这样书写链接:href="http://www.runoob.com/html",就会向服务器产生两次 HTTP 请求。这是因为服务器会添加正斜杠到这个地址,然后创建一个新的请求,就像这样:href="http://www.runoob.com/html/"。

图片链接

如何使用图片链接。

在当前页面链接到指定位置

如何使用书签

跳出框架

本例演示如何跳出框架,假如你的页面被固定在框架之内。

创建电子邮件链接

本例演示如何如何链接到一个邮件。(本例在安装邮件客户端程序后才能工作。)

建电子邮件链接 2

本例演示更加复杂的邮件链接。

HTML 链接标签

标签描述
<a>定义一个超级链接

如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!