最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript DOM 學習第三章 內(nèi)容表格

 更新時間:2010年02月19日 13:20:00   作者:  
在這一章我會解釋我的網(wǎng)站上的所有頁面都在運行的內(nèi)容表格的代碼。他會生產(chǎn)這個頁面的所有h3和h4的列表,然后給他們添加一個鏈接。

如果你也想這么做,那么你還需要我的getElementByTagNames()函數(shù)。

復制代碼 代碼如下:

function createTOC() {
    var y = document.createElement('div');
    y.id = 'innertoc';
    var a = y.appendChild(document.createElement('span'));
    a.onclick = showhideTOC;
    a.id = 'contentheader';
    a.innerHTML = 'show page contents';
    var z = y.appendChild(document.createElement('div'));
    z.onclick = showhideTOC;
    var toBeTOCced = getElementsByTagNames('h2,h3,h4,h5');
    if (toBeTOCced.length < 2) return false;

    for (var i=0;i<toBeTOCced.length;i++) {
        var tmp = document.createElement('a');
        tmp.innerHTML = toBeTOCced[i].innerHTML;
        tmp.className = 'page';
        z.appendChild(tmp);
        if (toBeTOCced[i].nodeName == 'H4')
            tmp.className += ' indent';
        if (toBeTOCced[i].nodeName == 'H5')
            tmp.className += ' extraindent';
        var headerId = toBeTOCced[i].id || 'link' + i;
        tmp.href = '#' + headerId;
        toBeTOCced[i].id = headerId;
        if (toBeTOCced[i].nodeName == 'H2') {
            tmp.innerHTML = 'Top';
            tmp.href = '#top';
            toBeTOCced[i].id = 'top';
        }
    }
    return y;
}

var TOCstate = 'none';

function showhideTOC() {
    TOCstate = (TOCstate == 'none') ? 'block' : 'none';
    var newText = (TOCstate == 'none') ? 'show page contents' : 'hide page contents';
    document.getElementById('contentheader').innerHTML = newText;
    document.getElementById('innertoc').lastChild.style.display = TOCstate;
}

解釋
這段代碼運行如下:
準備階段
首先我創(chuàng)建一個<div id="innertoc">來放置表格內(nèi)容
復制代碼 代碼如下:

function createTOC() {
var y = document.createElement('div');
y.id = 'innertoc';

然后在他的上面添加一個<span>標簽。點擊這個元素就會運行showhideTOC()函數(shù),我會在下面解釋。
復制代碼 代碼如下:

var a = y.appendChild(document.createElement('span'));
a.onclick = showhideTOC;
a.id = 'contentheader';
a.innerHTML = 'show page contents';

然后我再創(chuàng)建一個DIV用了放置真正的鏈接。在這個div上單擊(真正的含義是:在這個div里的任何一個鏈接上單擊)一樣會觸發(fā)showhideTOC()函數(shù)。
復制代碼 代碼如下:

var z = y.appendChild(document.createElement('div'));
z.onclick = showhideTOC;

得到標題
然后新建一個toBeTOCced數(shù)組,再用我的getElementByTagNames()函數(shù)來得到整個頁面的左右標題。
復制代碼 代碼如下:
var toBeTOCced = getElementsByTagNames('h2,h3,h4,h5');

如果數(shù)組里只有一個元素(比如這個頁面只有一個h2標題)就停止。我不想讓ToC只有一個元素。

創(chuàng)建ToC
現(xiàn)在開始創(chuàng)建ToC。首先遍歷toBeTOCced數(shù)組。對于每個元素我都創(chuàng)建一個和他們的標題相同的鏈接。注意innerHTML的使用:網(wǎng)站里有些標題包含<code>這樣的HTML標簽,我也想讓這些在ToC里面顯示。我把這些新的鏈接添加在ToC的里面的<div>上。

復制代碼 代碼如下:

for (var i=0;i<toBeTOCced.length;i++) {
var tmp = document.createElement('a');
tmp.innerHTML = toBeTOCced[i].innerHTML;
tmp.className = 'page';
z.appendChild(tmp);


如果標題是h4或者h5我就添加一個額外的類。
復制代碼 代碼如下:

if (toBeTOCced[i].nodeName == 'H4')
tmp.className += ' indent';
if (toBeTOCced[i].nodeName == 'H5')
tmp.className += ' extraindent';

現(xiàn)在我們需要把a元素鏈接到他真正的標題上。這需要一個唯一的ID。然而,這些標題可能已經(jīng)包含一個ID了。我不想破壞原有的內(nèi)部鏈接,所以我更愿意使用標題本來的ID。只有當標題沒有ID的時候我才創(chuàng)建一個新的ID。
復制代碼 代碼如下:
var headerId = toBeTOCced[i].id || 'link' + i;

我們剛剛創(chuàng)建的鏈接的href屬性就應該是#+headerId,標題本身也就有了一個ID。
復制代碼 代碼如下:

tmp.href = '#' + headerId;
toBeTOCced[i].id = headerId;

一個特殊情況:如果標題是H2,那就是頁面的頂部,也會得到一個ID。
復制代碼 代碼如下:

if (toBeTOCced[i].nodeName == 'H2') {
tmp.innerHTML = 'Top';
tmp.href = '#top';
toBeTOCced[i].id = 'top';
}
}

現(xiàn)在表格就生產(chǎn)了,我們返回給調(diào)用它的地方。
復制代碼 代碼如下:
return y;}


顯示和隱藏ToC
最后這個函數(shù)用了顯示和隱藏ToC。非常的簡單,先檢測ToC的狀態(tài),然后根據(jù)信息生產(chǎn)一個新的文本和display值。
復制代碼 代碼如下:

var TOCstate = 'none';
function showhideTOC() {
TOCstate = (TOCstate == 'none') ? 'block' : 'none';
var newText = (TOCstate == 'none') ? 'show page contents' : 'hide page contents';
document.getElementById('contentheader').innerHTML = newText;
document.getElementById('innertoc').lastChild.style.display = TOCstate;
}

這個函數(shù)在用戶點擊<span>的時候調(diào)用,那樣他就可以切換ToC的顯示。另外當用戶在鏈接上點擊的時候也會馬上隱藏ToC的。
翻譯地址:http://www.quirksmode.org/dom/toc.html
轉載請保留以下信息
作者:北玉(tw:@rehawk)

相關文章

  • JavaScript DOM 學習第五章 表單簡介

    JavaScript DOM 學習第五章 表單簡介

    在這一章我主要介紹一些用來檢測用戶輸入的代碼,利用這些代碼,你也可以寫一些自己的檢測函數(shù)。
    2010-02-02
  • JavaScript ES6箭頭函數(shù)使用指南

    JavaScript ES6箭頭函數(shù)使用指南

    JavaScript ES6箭頭函數(shù)是一個來自ECMAScript 2015(又稱ES6)的全新特性,有傳聞說,箭頭函數(shù)的語法=>,是受到了CoffeeScript 的影響,并且它與CoffeeScript中的=>語法一樣,共享this上下文
    2018-12-12
  • 如何用ajax來創(chuàng)建一個XMLHttpRequest對象

    如何用ajax來創(chuàng)建一個XMLHttpRequest對象

    如何創(chuàng)建ajax代理對象? 我知道怎么做~就是不清楚怎么用語言表達?本文將詳細介紹如何解決此問題
    2012-12-12
  • 詳解原生JS動態(tài)添加和刪除類

    詳解原生JS動態(tài)添加和刪除類

    這篇文章主要介紹了原生JS動態(tài)添加和刪除類,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • JavaScript操作數(shù)組的常用方法總結

    JavaScript操作數(shù)組的常用方法總結

    這篇文章總結了JavaScript操作數(shù)組的常用方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • JavaScript中Number.MIN_VALUE屬性的使用示例

    JavaScript中Number.MIN_VALUE屬性的使用示例

    這篇文章主要介紹了JavaScript中Number.MIN_VALUE屬性的使用示例,是JS入門學習中的基礎知識,需要的朋友可以參考下
    2015-06-06
  • JS數(shù)組遍歷中for,for in,for of,map,forEach各自的使用方法與優(yōu)缺點

    JS數(shù)組遍歷中for,for in,for of,map,forEach各自的使用方法與優(yōu)缺點

    這篇文章主要介紹了JS數(shù)組遍歷中for,for in,for of,map,forEach各自的使用方法與優(yōu)缺點,需要的朋友可以參考下
    2022-01-01
  • JavaScript對象、屬性、事件手冊集合方便查詢

    JavaScript對象、屬性、事件手冊集合方便查詢

    JavaScript對象、屬性、事件手冊查詢,對于學習js的朋友方便查找。
    2010-07-07
  • 最新評論

    屏东县| 新干县| 合肥市| 绍兴市| 永靖县| 晋城| 兰西县| 左云县| 鄂伦春自治旗| 蒙山县| 集安市| 博湖县| 石阡县| 上蔡县| 齐河县| 吉木萨尔县| 皋兰县| 原阳县| 莲花县| 磴口县| 昭通市| 封丘县| 吉安市| 类乌齐县| 云和县| 金湖县| 镇宁| 乐安县| 金门县| 宁波市| 临夏县| 四会市| 英山县| 平顺县| 嫩江县| 茌平县| 汉阴县| 南郑县| 府谷县| 东台市| 中山市|