禁用导航中当前页面的链接

时间:2010-09-08 22:51:27

标签: php javascript css xhtml

我有一个非常标准的网站导航。主导航是ul,有几个嵌套的ul。我基本上只是想在用户已经在该页面上时动态禁用链接。

因此,如果我在主页上,则需要禁用主页链接。如果我在联系页面上,则需要禁用联系页面链接。

我不想完全删除链接,只需从锚点中删除href,或者只是让锚点自身取消激活。在XHTML,CSS,JavaScript或php中是否有一个快速,灵活和优雅的解决方案。我还想要一个全面友好的解决方案,而不仅仅是现代浏览器(你可以阅读,IE 6)。

我确实想过在每个页面上设置一个路径变量,然后为每个链接都有一个if语句,但这看起来非常单调乏味和愚蠢。但是,嘿,它可以完成工作。

2 个答案:

答案 0 :(得分:3)

我认为最好在页面生成代码(即PHP)中执行此操作,迭代每个链接并删除<a>标记,将其替换为<span>或类似的内容(如果链接匹配当前页面的匹配条件。 PHP在其基础中为您提供当前页面(以各种方式:$_SERVER['REQUEST_URI']$_SERVER['SCRIPT_FILENAME']$_SERVER['PHP_SELF']$_SERVER['QUERY_STRING']等),并使用这些页面,您可以确定算法匹配您的页面。

答案 1 :(得分:0)

用于从 <a> 标签中删除 href 属性的 JavaScript:

var anchors = document.getElementsByTagName('a');
for( var i=0; i < anchors.length; i++ ) {
    if ( anchors[i].getAttribute('href') === win.location.href ) {
        anchors[i].removeAttribute('href');
        //anchors[i].setAttribute('class', 'unlinked'); add for IE8
    }
}

用于禁用链接事件的 CSS:

a:not([href]) {
/* a.unlinked { */  use in place of the line above for IE8
    pointer-events:none;
    color:inherit;
}

它适用于 IE9 或更高版本。

对于 IE8,您必须使用替代代码行(请参阅注释)。

对于 IE6 或 IE7,必须删除 <a> 标记,并在其位置插入具有相同文本的 <span> 标记(删除 href 对它们不起作用)。