1

現在、記事を古い 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>');
});
4

2 に答える 2

1
$("a[href='http://www.google.com/']").attr('href', 'http://www.live.com/'); 

1つの解決策は、すべてのリンクに対してこれを行うことです

于 2013-03-08T08:33:16.823 に答える
0

.attr()500 以上のステートメントを実行しないでください。ページを処理するより効率的な方法を使用します。

次のように 2 つのファイルを作成します。

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

.user.jsgmファイルと同じフォルダに配置します。

次に、スクリプトは次のようになります。

// ==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;
    }
}
于 2013-03-08T09:43:45.930 に答える