用新链接替换站点上的大量旧链接?(客户端)

Replace lots of old links on a site with new links? (client side)

本文关键字:链接 客户端 站点 新链接 替换      更新时间:2023-09-26

我们目前正在将文章从旧的CMS迁移到新的CMS。问题是旧文章中的链接是硬编码的,并且引用的是旧网站。

我们迁移者不能访问数据库,所以所有的文章和链接都必须手动更改。
我有旧的站点地图和新的站点地图,并想写一个Greasemonkey/jquery脚本点击一个按钮,脚本会改变所有旧的cms链接到新的cms链接。

在这种情况下,最好/最优雅的解决方案是什么?使用数组?有500多个网站/文章…

你会建议记住什么,只允许客户端脚本?

目前我有这个小片段,用!标记所有旧链接。

$("#links").click(function() 
{
    $('a[href*="pattern-of-old-cms"]')
        .append('<span class="attention" style="font-size: 25px; color:red;">!</span>');
});
$("a[href='http://www.google.com/']").attr('href', 'http://www.live.com/'); 
一个解决方案是对所有的链接都这样做

不要运行500+ .attr()语句!使用更有效的方式处理页面

创建如下两个文件:

old_URLs.js:

var oldUrlArray = [
    "Old address 1",
    "Old address 2",
    "Old address 3",
    // etc., etc.
]

new_URLs.js:

var newUrlArray = [
    "New address 1",
    "New address 2",
    "New address 3",
    // etc., etc.
]

并将它们放置在与gm .user.js文件相同的文件夹中。

然后你的脚本变成:

// ==UserScript==
// @name     _Mass link replacer remapper
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require  old_URLs.js
// @require  new_URLs.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/
var oldLinks = $('a[href*="pattern-of-old-cms"]');
while (oldLinks.length) {
    var firstHref = oldLinks[0].href;
    var hrefIndex = oldUrlArray.indexOf (firstHref);
    if (hrefIndex >= 0) {
        var toReplace   = oldLinks.filter ("[href='" + firstHref + "']");
        toReplace.attr ("href", newUrlArray[hrefIndex]);
        oldLinks = oldLinks.not (toReplace);
    }
    else {
        alert ("I don't know how to map the link: " + firstHref);
        break;
    }
}