【问题标题】:Tampermonkey script to turn text into linksTampermonkey 脚本将文本转换为链接
【发布时间】:2014-12-24 13:24:18
【问题描述】:

这里的另一个可怜的灵魂无法在 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 table 和http://www.overclock.net/t/487779/help-with-greasemonkey-and-regular-expressions,但我不知道如何使任何建议的答案适用于我的情况。 (我在 Chrome 中运行 Tampermonkey,但希望 Greasemonkey 的答案可能对我有用。)我将非常感谢任何帮助。

【问题讨论】:

  • document.querySelectorAll("tr td:first-child").forEach(function(a){ a.innerHTML=a.textContent.link("mydomain.com/workflow/…);});跨度>

标签: javascript html regex tampermonkey


【解决方案1】:

如果你不使用 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>');
   }

编辑 使用了你的链接

【讨论】:

  • 恐怕对我不起作用,但感谢您的建议。
  • 在发布之前很有趣,我对其进行了测试,除了第一个 TH 之外的所有数字都被成功替换为链接。将其作为 window.onload() 函数。出了什么问题?
【解决方案2】:

这应该为tampermonkey做。

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

// ==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>");
        }
    });

});

【讨论】:

  • 谢谢,效果很好!我添加了一个使用 td:nth-child(3) 的版本,用于第三列中数字的一页(为什么不一致的 UI 会导致我的死亡)。我从未使用过 jquery,因此非常感谢您的帮助。
  • 语法$(document).on("ready", handler)has been removed in jQuery 3.0。只需说$(function() {...}); 另见this answer
猜你喜欢
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 2011-07-10
相关资源
最近更新 更多