【问题标题】:change domain portion of links with javascript or jquery使用 javascript 或 jquery 更改链接的域部分
【发布时间】:2011-09-16 19:32:29
【问题描述】:

很抱歉我最初的问题不清楚,希望通过改写我可以更好地解释我想要做什么。

因此,我需要一种使用 JavaScript(或 jQuery)的方法来执行以下操作:

  • 确定当前被访问页面的域
  • 识别页面上所有使用域名 www.domain1.com 的链接并替换为 www.domain2.com

即如果用户正在访问 www.domain2.com/index 则:

<a href="www.domain1.com/contentpages/page.html">Test 1</a>

应该在加载到时动态重写

<a href="www.domain2.com/contentpages/page.html">Test 1</a>

是否可以只重写href 标签中的一部分url?

【问题讨论】:

  • 我们在谈论多少用户?例如,如果它是呼叫中心楼层,我们谈论的是 很多 个 IP 地址。有没有其他区别这些用户的独特方法?
  • 欢迎来到 SO - 有漂亮的布局控件不需要您使用 HTML 进行格式化。我只是重新格式化了基础问题代码。谢谢!
  • 另外...为什么不直接使用相对路径?
  • 检测用户的 ip 是很容易的部分。因为他们通过隧道访问,所以我只需要寻找 1 个 ip,我可以在使用 location.host 访问的当前 url 的主机部分中找到它。我正在努力的部分是如何识别页面上使用“example.com”的所有链接并将超链接的那部分替换为“xxx.xx.xxx”......我不能使用相对链接由于网站的可怕结构(我无法控制)
  • @mpriney:您是在谈论在服务器端执行此操作吗? javascript 标签使它看起来像是在考虑客户端。如果是客户端,用户 IP不容易

标签: javascript jquery hyperlink


【解决方案1】:

您的代码将遍历页面上的所有链接。这是一个仅对需要替换的 URL 进行迭代的版本。

var linkRewriter = function(a, b) {
    $('a[href*="' + a + '"]').each(function() {
        $(this).attr('href', $(this).attr('href').replace(a, b));
    });
};

linkRewriter('originalDomain.com', 'rewrittenDomain.com');

【讨论】:

  • 我通过调用linkRewriter('http://foo.bar/','/'); 来强制使用某个域的相对网址
  • 如果我使用相对域并想更新域怎么办?
【解决方案2】:

我想出了如何做到这一点。

<script type="text/javascript"> 
// link rewriter
$(document).ready (
    function link_rewriter(){ 
        var hostadd = location.host;
        var vendor = '999.99.999.9';
        var localaccess = 'somesite1.';

        if (hostadd == vendor) { 
            $("a").each(function(){
                var o = $(this);
                var href = o.attr('href');
                var newhref;
                newhref = href.replace(/somesite1/i, "999.99.999.99");
                o.attr('href',newhref);
            });
        }
    }
);
</script>

【讨论】:

    【解决方案3】:

    您需要使用 Java 或其他服务器端来获取 IP 地址。看到这个:

    http://javascript.about.com/library/blip.htm

    【讨论】:

      【解决方案4】:

      使用 REGEX 替换 urls 域

      此示例将所有使用my-domain.com 的url 替换为my-other-domain(两者都是变量)。

      您可以通过在原始字符串模板中组合字符串值和其他正则表达式来执行动态正则表达式。使用 String.raw 将防止 javascript 转义字符串值中的任何字符。

      // Strings with some data
      const domainStr = 'my-domain.com'
      const newDomain = 'my-other-domain.com'
      
      // Make sure your string is regex friendly
      // This will replace dots for '\'.
      const regexUrl = /\./gm;    
      const substr = `\\\.`;
      const domain = domainStr.replace(regexUrl, substr);
      // domain is a regex friendly string: 'my-domain\.com'
      console.log('Regex expresion for domain', domain)
      
      // HERE!!! You can 'assemble a complex regex using string pieces.
      const re = new RegExp( String.raw `([\'|\"]https:\/\/)(${domain})(\S+[\'|\"])`, 'gm');
      
      // now I'll use the regex expression groups to replace the domain
      const domainSubst = `$1${newDomain}$3`;
      
      // const page contains all the html text
      const result = page.replace(re, domainSubst);
      

      注意:不要忘记使用 regex101.com 创建、测试和导出 REGEX 代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-12
        • 2016-09-04
        • 2013-04-18
        • 2014-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多