Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用新链接替换站点上的大量旧链接?(客户端)_Javascript_Jquery_Content Management System_Greasemonkey - Fatal编程技术网

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

Javascript 用新链接替换站点上的大量旧链接?(客户端),javascript,jquery,content-management-system,greasemonkey,Javascript,Jquery,Content Management System,Greasemonkey,我们目前正在将文章从旧CMS迁移到新CMS。问题是旧文章中的链接是硬编码的,并且引用的是旧站点 我们迁移者无法访问数据库,因此必须手动更改所有文章和所有链接。 我有旧的站点地图和新的站点地图,我想写一个Greasemonkey/jQuery脚本来点击一个按钮,这个脚本会将所有旧的cms链接更改为新的cms链接 在这种情况下,最好/最优雅的解决方案是什么?使用阵列?有500多个站点/文章 请记住,只允许客户端脚本,您有什么建议 目前我有一个小片段,它用一个 $("#links").click(fu

我们目前正在将文章从旧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*=“旧cms的模式”]”)
。附加(“!”);
});
一个解决方案是对所有链接执行此操作

一个解决方案是对所有链接执行此操作,不要运行500+
.attr()
语句!使用更有效的方式处理页面

创建如下两个文件:

旧URL.js:

var oldUrlArray = [
    "Old address 1",
    "Old address 2",
    "Old address 3",
    // etc., etc.
]
新的URL.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;
    }
}
不要运行500+
.attr()
语句!使用更有效的方式处理页面

创建如下两个文件:

旧URL.js:

var oldUrlArray = [
    "Old address 1",
    "Old address 2",
    "Old address 3",
    // etc., etc.
]
新的URL.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;
    }
}

您不能在您的情况下使用
.htaccess
?这将是最好的解决方案,使用
[R=301]
tag.nope,仅客户端访问:(您不能在您的情况下使用
.htaccess
吗?这将是最好的解决方案,使用
[R=301]
tag.nope,仅客户端访问:(当然可以,但是有500个不同的链接?很难,旧的链接是这样的/index.php?id=181,新的链接有友好的url,比如/about us,看起来你的jquery解决方案是唯一的一个…加载一个javascript,它在一个映射中有旧url到新url的映射。然后使用本文建议的方法替换相应的路径,make和excel spre包含以下内容的adsheet:Column A:$(“A[href=”Column B:旧链接Column C:'])。attr('href','Column D:新链接Column E:');复制记事本中的所有内容,并将标签替换为空。doneThanks!我想我会将您的excel提示用于Brocksure的数组解决方案,但有500个不同的链接?很难,旧链接是这样的/index.php?id=181,新链接有友好的URL,如/about我们看起来您的jquery解决方案是唯一的一个…加载javascript,它在映射中具有旧url到新url的映射。然后使用此处建议的方法将路径相应地替换为:列a:$(“a[href=”列B:旧链接列C:“]”)。attr('href',列D:新链接列E:“);复制记事本中的所有内容,并将选项卡替换为零。doneThanks!我想我会将您的excel提示用于Brockthank提供的数组解决方案。非常感谢!我认为这会很好,我已经考虑过使用数组解决此任务,但需要提示:)非常感谢!我认为这会很好,我已经考虑过使用数组解决此任务,但需要一个提示:)