【问题标题】:Rewriting specific links with javascript, except links to specific directory用 javascript 重写特定链接,特定目录的链接除外
【发布时间】:2012-05-20 16:41:27
【问题描述】:

我有一个包含链接的页面,需要用 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”?

谢谢!

【问题讨论】:

    标签: javascript jquery html url-rewriting hyperlink


    【解决方案1】:

    在循环内部,检查href字符串是否包含'img',如果没有找到就修改。

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

    【讨论】:

      【解决方案2】:

      这很好用

      我怀疑……

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2016-06-27
          • 2012-03-31
          • 2013-08-25
          • 1970-01-01
          • 1970-01-01
          • 2018-11-13
          • 1970-01-01
          • 2012-06-17
          • 2011-09-24
          相关资源
          最近更新 更多