2012-05-12 56 views
0

我有一个包含链接的页面,需要使用Javascript重新编写页面。需要将div id =“container”中的所有链接从“post = post-number-234”重新编译为“?id = blog & post = post-number-234”。使用javascript重写特定链接,但特定目录的链接除外

目前我有此脚本:

<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 & img/image-name.jpg”中的图像。

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

谢谢!

回答

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> 
1

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

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

这工作得很好

我怀疑如此...

首先你会得到一个DOM元素ID为 “内容”。然后,您尝试从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>