时间:2021-07-01 10:21:17 帮助过:6人阅读
这样的HTML标签,我也想让这些在ToC里面显示。我把这些新的链接添加在ToC的里面的上。
代码如下:
for (var i=0;ivar 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;
}
这个函数在用户点击的时候调用,那样他就可以切换ToC的显示。另外当用户在链接上点击的时候也会马上隐藏ToC的。
翻译地址:http://www.quirksmode.org/dom/toc.html
转载请保留以下信息
作者:北玉(tw:@rehawk)