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

来源:互联网 发布:手机制作报纸软件 编辑:程序博客网 时间:2024/06/06 17:29

用途:修改每个部分的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].onclick=function () {            showSection(this.destination);            return false;        }    }}



0 0
原创粉丝点击