Tampermonkey脚本将文本转换为链接

时间:2014-10-28 23:19:18

标签: javascript html regex tampermonkey

这里的另一个可怜的灵魂无法在Tampermonkey / Greasemonkey中进行文本替换的正面或反面。我正在处理一系列表格行:

<table class="table table-striped table-hover">
    <tr>
        [a bunch of header cells]
    </tr>
    <tr>
        <td>412</td>
        <td>An image</td>
        <td>A thing</td>
        <td>A person</td>
        <td>A place</td>
    </tr>
    <tr>
        <td>3789</td>
        <td>An image</td>
        <td>A thing</td>
        <td>A person</td>
        <td>A place</td>

我想要的是将每个数字转换为此表单的链接:

        <td><a href="https://mydomain.com/workflow/index.html?
             endrun=1&submit=Edit&record=3789">3789</a></td>

(?之后的换行符恰好在这里适合页面; URL中不应该有实际的换行符。)

表格中有多行;每一个都以我想要链接的数字开头。在网站的某些页面上,该数字是每行中的第三个或第四个项目,而不是第一个。每个页面只有一个表。我不想更改标题行中的第一个单元格,因为这些单元格已经可以点击并用于排序,我也不想链接任何单词 - 只是数字。

我查看了Most concise way to do text replacement on a web page? (using GreaseMonkey)How to create links from existing text in Greasemonkey?以及Greasemonkey: Add a link in a tablehttp://www.overclock.net/t/487779/help-with-greasemonkey-and-regular-expressions,但我无法弄清楚如何让任何建议的答案适用于我情况。 (我在Chrome中运行Tampermonkey,但希望Greasemonkey的答案对我有用。)我会谦卑地感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

这应该用于tampermonkey。

只需要将命名空间更新为您希望它运行的命名空间。 如果该站点已经使用了jQuery,那么您也可以抛弃require属性。

&#13;
&#13;
// ==UserScript==
// @name       Updator
// @namespace  http://stackoverflow.com/
// @version    0.1
// @description  enter something useful
// @match      http://*/*
// @copyright  2012+, You
// @require http://code.jquery.com/jquery-2.1.1.min.js
// ==/UserScript==


$(document).on("ready", function() {
    
    $("table.table-striped td:first-child").each(function(e, i){
        var this$ = $(this);
        var q = this$.html()
        if (/^\d+$/ig.test(q)){
            this$.html("<a href='https://mydomain.com/workflow/index.html?endrun=1&submit=Edit&record=" + q + "' >" + q + "</a>");
        }
    });

});
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如果你不使用jQuery,你也可以这样做:

    var cells = [];
    var coll1 = document.getElementsByTagName('TH');
    var coll2 = document.getElementsByTagName('TD');
    for (var i = 1; i < coll1.length; i++) {
        cells.push(coll1[i]);
    }
    for (var i = 0; i < coll2.length; i++) {
        cells.push(coll2[i]);
    }
    for (var i = 0; i < cells.length; i++) {
      var cellValue = cells[i].innerHTML;
      var number = cellValue.match(/\d+/)[0];//get first number in a cell
      cells[i].innerHTML = cellValue.replace(/\d+/, '<a href="https://mydomain.com/workflow/index.html?endrun=1&submit=Edit&record=' + number + '">' + number + '</a>');
   }

修改 使用了您的链接