时间:2021-05-28
如果你也想这么做,那么你还需要我的getElementByTagNames()函数。
复制代码 代码如下:
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;
}
解释
这段代码运行如下:
准备阶段
首先我创建一个<div id="innertoc">来放置表格内容
复制代码 代码如下:
function createTOC() {
var y = document.createElement('div');
y.id = 'innertoc';
然后在他的上面添加一个<span>标签。点击这个元素就会运行showhideTOC()函数,我会在下面解释。
复制代码 代码如下:
var a = y.appendChild(document.createElement('span'));
a.onclick = showhideTOC;
a.id = 'contentheader';
a.innerHTML = 'show page contents';
然后我再创建一个DIV用了放置真正的链接。在这个div上单击(真正的含义是:在这个div里的任何一个链接上单击)一样会触发showhideTOC()函数。
复制代码 代码如下:
var z = y.appendChild(document.createElement('div'));
z.onclick = showhideTOC;
得到标题
然后新建一个toBeTOCced数组,再用我的getElementByTagNames()函数来得到整个页面的左右标题。
复制代码 代码如下: var toBeTOCced = getElementsByTagNames('h2,h3,h4,h5');
如果数组里只有一个元素(比如这个页面只有一个h2标题)就停止。我不想让ToC只有一个元素。
创建ToC
现在开始创建ToC。首先遍历toBeTOCced数组。对于每个元素我都创建一个和他们的标题相同的链接。注意innerHTML的使用:网站里有些标题包含<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';
现在我们需要把a元素链接到他真正的标题上。这需要一个唯一的ID。然而,这些标题可能已经包含一个ID了。我不想破坏原有的内部链接,所以我更愿意使用标题本来的ID。只有当标题没有ID的时候我才创建一个新的ID。
复制代码 代码如下: var headerId = toBeTOCced[i].id || 'link' + i;
我们刚刚创建的链接的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';
}
}
现在表格就生产了,我们返回给调用它的地方。
复制代码 代码如下:return y;}
显示和隐藏ToC
最后这个函数用了显示和隐藏ToC。非常的简单,先检测ToC的状态,然后根据信息生产一个新的文本和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;
}
这个函数在用户点击<span>的时候调用,那样他就可以切换ToC的显示。另外当用户在链接上点击的时候也会马上隐藏ToC的。
翻译地址:http://www.quirksmode.org/dom/toc.html
转载请保留以下信息
作者:北玉(tw:@rehawk)
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
第三章DOMDOM是“DocumentObjectModel”(文档对象模型)的首字母缩写。节点元素节点(elementnode):是DOM的原子。如:文本段落
《外贸来函电》这门课程有十一章自内容,包括:bai第一章商务信函的格式、du第二章商务信函的写作原则、第三章建立dao业务关系、第四章询盘、第五章报盘、第六章C
各位抖音达人注意,抖音内容电商禁售类目规范调整了,其中第三章违规处理及附则有变化,具体的变化看下面。变更1变化前:变化后:变更2变化前:变化后:第四章附则第十一
第三章主板综述主板(MotherBoard,也叫MainBoard或SystemBoard)是一台PC的主体所在,主板完成电脑系统的管理和协调,支持各种CPU、
本文实例为大家分享了Android打开系统相机并拍照的具体实现代码,供大家参考,具体内容如下目标效果:第二张为点击第一个按钮拍照后显示的,比较模糊,第三章为点击