0

嗨。我正在尝试在页面的开头创建一个内联样式表,该样式表对我从 url 获取的内容做出反应。我这样做是为了让我突出显示的页面的导航按钮。有点像这里 www.myeg.net ,但他们有一个静态站点,而且更容易。

<script type="text/javascript">
function parseUrl( url ) {
    var a = document.createElement('a');
    a.href = url;
    return a;
}

var page=parseUrl('').search

function getSecondPart(str) {
    return str.split('=')[1];
}

var site=getSecondPart(page);

var style = document.createElement("style");
style.innerHTML = ".nav_" + page + " { background-image:url('images/gradients/transparent_gradient.png');}";
document.body.appendChild(style);


}
</script>
</head>
<body>
<center><div><img width="960px" height="187.5" src="images/fullbanner.png"></div></center>
<div id="wrapper">
<div id="navbar">
<ul>
<li class="nav_index"><a href="index.php">Home</a></li>
<li class="nav_archive"><a href="index.php?site=news&action=archive">News</a></li>
<li class="nav_squads"><a href="index.php?site=squads">Roster</a></li>
<li class="nav_forum"><a href="index.php?site=forum">Forums</a></li>
<li class="nav_about"><a href="index.php?site=about">Contact</a></li>
</ul> 

我对 javascript 很陌生,所以抱歉 ;;;

4

1 回答 1

0

尝试这个:

<style type="text/css">
#banner{text-align:center;}
#banner>img{width:960px;height:187.5px;}
#nav>.selected{background-image:url('images/gradients/transparent_gradient.png');}
</style>
</head>
<body>
<div id="banner"><img src="images/fullbanner.png"></div>
<div id="wrapper">
<div id="navbar">
<ul id="nav">
<li id="nav_index"><a href="index.php">Home</a></li>
<li id="nav_archive"><a href="index.php?site=news&action=archive">News</a></li>
<li id="nav_squads"><a href="index.php?site=squads">Roster</a></li>
<li id="nav_forum"><a href="index.php?site=forum">Forums</a></li>
<li id="nav_about"><a href="index.php?site=about">Contact</a></li>
</ul> 
<script type="text/javascript">
document.getElementById('nav_'+window.location.href.split('=')[1]).className='selected';
</script>

你不应该使用<center>它,它已被弃用!

您应该匹配一个类,然后只使用 javascript 将该类添加到您的元素中,而不是使用 javascript 编写样式表来匹配元素。

而且我不太了解您的代码:

function parseUrl( url ) {
    var a = document.createElement('a');
    a.href = url;
    return a;
}

var page=parseUrl('').search

它给""了我,但我从来没有.search在锚上见过......如果你想获取当前的 URL,你可以做window.location.href.

还有一点:如果您使用var外部函数(在全局范围内),您正在创建一个全局变量,该变量不会被删除并使用内存。然后,您可以在不想再使用它时将其删除(var a="dagjhdjgailghkagh";/*code*/;a=null;),或者使用包含您的代码的自执行函数(闭包)。

编辑:

抱歉,#nav>selected我的意思不是#nav>.selected.

你可以在这里看到一个演示:http: //jsfiddle.net/VhWHp/

(但网址没有=,所以我手动将其替换为“存档”。在您的网站中,删除该行)

是的,它先加载 CSS,然后再加载导航。但这就是 CSS 和 javascript 的真正威力:如果在加载后将类设置为元素,则该元素将具有应用于该类的样式。

编辑2:

问题是,如果你这样做split('=')[1],结果将类似于"news&action"而不是"news".

然后,你可以使用我前段时间写的一个函数:

function sQuery(arg) {
  if(window.location.search){
    var que = window.location.search.substring(1);
    if(arg=='string'){return que;}
    que = que.split("&");
    if(!arg||arg=='array'){return que;}
    for(var i=0;i<que.length;i++){
      var qvar = que[i].split("=");
      if(qvar[0]==arg){
        return qvar[1];
      }
    }
  }
  return false;
}

然后,像这样调用函数:sQuery('site')

document.getElementById('nav_'+(sQuery('site')||'index')).className='selected';

你也可以打电话sQuery('array')或只是sQuery()如果你想得到["site=news","action=archive"]sQuery('string')如果你愿意"site=news&action=archive"。如果你不使用它,你可以简化函数:

function sQuery(arg) {
  if(window.location.search){
    var que = window.location.search.substring(1).split("&");
    for(var i=0;i<que.length;i++){
      var qvar = que[i].split("=");
      if(qvar[0]==arg){
        return qvar[1];
      }
    }
  }
  return false;
}
于 2012-08-31T23:16:29.237 回答