簡體   English   中英

用新鏈接替換網站上的許多舊鏈接? (客戶端)

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

我們目前正在將文章從舊的CMS遷移到新的CMS。 問題在於,舊文章中的鏈接是硬編碼的,並且指向舊站點。

我們的遷移者無權訪問數據庫,因此所有文章和所有鏈接都必須手動更改。
我有舊的站點地圖和新的站點地圖,並想編寫一個Greasemonkey / jQuery腳本來單擊一個按鈕,該腳本會將所有舊的cms鏈接更改為new-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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM