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

Rewriting specific links with javascript, except links to specific directory

本文关键字:链接 javascript 重写 使用      更新时间:2023-09-26

我有一个包含链接的页面,需要用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&img/image-name.jpg"中搜索图像。

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

谢谢!

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

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

在循环中,检查href字符串是否包含"img",只有在找不到时才修改它。

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

这工作正常

我怀疑是这样...

首先,你得到一个 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>