我们目前正在将文章从旧CMS迁移到新的CMS。问题是旧文章中的链接是硬编码的,并且引用了旧网站。
我们的迁移者无法访问数据库,因此必须手动更改所有文章和所有链接 我有旧的站点地图和新的站点地图,并希望编写一个Greasemonkey / jQuery脚本来单击一个按钮,脚本会将所有旧的cms链接更改为new-cms-links。
在这种情况下,最佳/最优雅的解决方案是什么?使用数组?有500多个网站/文章...
您有何建议请注意,只允许客户端脚本?
目前我有这个小片段,用一个标记所有旧链接!
$("#links").click(function()
{
$('a[href*="pattern-of-old-cms"]')
.append('<span class="attention" style="font-size: 25px; color:red;">!</span>');
});
答案 0 :(得分:1)
$("a[href='http://www.google.com/']").attr('href', 'http://www.live.com/');
一种解决方案是为所有链接执行此操作
答案 1 :(得分:0)
不要运行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;
}
}