使用javascript重写特定链接,但指向特定目录的链接除外

时间:2012-05-12 08:54:03

标签: javascript jquery html url-rewriting hyperlink

我有一个页面,其中包含需要使用Javascript重写的链接。 div id =“container”中的所有链接都需要从“post = post-number-234”重新编辑为“?id = blog& post = post-number-234”。

目前我有这个脚本:

<script type="text/javascript">
<!--
var content = document.getElementById('content');
var list = div.getElementsByTagName("A");
for( var i = 0; i < list.length; i++ ) 
{ 
  document.links[i].href = '?id=blog&' + document.links[i].href
}
// -->
</script>

这很好用。但我有Fancybook使用的图像链接。所有这些链接最初都链接到“img / image-name.jpg”。但现在fancybook不起作用,因为它搜索“?id = blog&amp; img / image-name.jpg”中的图像。

如何将重写应用于div“content”中未链接到目录“img”的所有链接?

谢谢!

3 个答案:

答案 0 :(得分:1)

在循环内部,检查href字符串是否包含'img',并且只有在找不到时才修改它。

if (document.links[i].href.indexOf('img') == -1) {
  document.links[i].href = '?id=blog&' + document.links[i].href;
}

答案 1 :(得分:1)

  

这很好用

我怀疑......

首先,您获得ID为“content”的DOM元素。然后,您尝试从div获取ReferenceError: div is not defined失败的所有链接,因为它未在任何地方定义(如果没有,则不提供所有相关代码)。

如果那样成功,那么你将迭代找到的链接并通过索引访问它们。但是来自错误的来源。而不是list您正在使用document.links

总结......

<script>
    var container = document.getElementById("container"),
        links = container.getElementsByTagName("a"),
        i = links.length,
        href;

    while (i--) {
        href = links[i].href;

        if (href.indexOf("img/") > -1) {
            continue;
        }

        links[i].href = "?id=blog&" + href;
    }
</script>

答案 2 :(得分:1)

假设您的页面中包含类似于以下内容的链接:

<a href="img/name.jpg"><img src="img/name.jpg" /></a>
<a href="post=post-number-234">Post Title - by Author Maybe?</a>

如果您不打算使用框架/库,例如jQuery等,您显然需要更加繁重和过滤掉,希望您不想改变自己。如下所示:

<script>
var content = document.getElementById("content")
  , list = content.getElementsByTagName("a")
  , i = 0
  , len = list.length;

for (; i < len; i++) {
   // check for "img/" directory or image file-extensions (gif, jpg, jpeg, png)
   if (!/^img\/|\.(?:gif|jpg|jpeg|png)$/i.test(list[i].href)) {
       list[i].href = "?id=blog&" + list[i].href;
   }
}
</script>