根据指定的id显示相应的<section>,同事隐藏其他部分(showSection函数)

用途:修改每个部分的display样式属性。除了与作为参数传入的id对应的部分,其他部分的display属性将被设置为“none”,而与传入id对应的那个部分的display属性则被设置为“block”

function showSection(id) {
    var sections=document.getElementsByTagName("section");
    for(var i=0;i<sections.length;i++){
        if(sections[i].getAttribute("id")!=id){
            sections[i].style.display="none";
        }else{
            sections[i].style.display="block";
        }
    }
}
//在<article>中的<nav>所包含的链接被单击事调用showSection函数
function prepareInternalnav() {
    if(!document.getElementsByTagName) return false;
    if(!document.getElementById) return false;
    var articles=document.getElementsByTagName("article");
    if(articles.length==0) return false;
    var navs=articles[0].getElementsByTagName("nav");
    if(navs.length==0) return false;
    var nav=navs[0];   //?
    var links=nav.getElementsByTagName("a");
    for(var i=0;i<links.length;i++){
        /*
        split方法:提取每一部分的id值
        这里,想要的是“#”后面的字符串,因此可以以“#”为分隔符,得到的数组中包含两个元素:第一个是“#”前面的所有字符(在此是空字符串),第二个元素则是后面的所有字符。数组中第一个元素的索引是0,我们想要的是第二个元素,它的索引是1。
        这样就可以把“#”后面的字符串提取出来并保存到sectionId变量中。
         */
        var sectionId=links[i].getAttribute("href").split("#")[1];
        //确保真的存在带有相应id的元素,如果不存在,则继续下一次循坏
        if(!document.getElementById(sectionId)) continue;
        //页面加载后,需要默认隐藏所有部分
        document.getElementById(sectionId).style.display="none";
        /*
        接下来可以给链接添加onclik事件处理函数,以便链接被单击后,把sectionId传给showSection函数。但这里存在作用域问题,因为变量sectionId是一个局部变量,它只有在prepareInternalnav执行期间存在,等到事件处理函数执行的时候它就不存在了。
        要解决这个问题,可以为每个链接创建一个自定义的属性。比如把这个属性命名为destination,然后把sectionId的值赋给它。
        这个属性的作用域是持久存在的。
         */
        links[i].destination=sectionId;
        links[i].οnclick=function () {
            showSection(this.destination);
            return false;
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值