Javascript userscript - 查找和替换:textnodes 和 HTML

Javascript userscript - Find and replace: textnodes and HTML

我正在尝试创建一个用户脚本 (Tampermonkey) 以将一些帮助按钮添加到网站中,最初我使用的是基于 here.

发布的脚本的以下脚本
setInterval(function() {

//RegEx for finding any string of digits after "ID: " up to the next space
var myRegexp = /ID:\s(\d*?)\s/gi;

];
var txtWalker   = document.createTreeWalker (
    document.body,
    NodeFilter.SHOW_TEXT,
    {   acceptNode: function (node) {
            //-- Skip whitespace-only nodes
            if (node.nodeValue.trim() )
                return NodeFilter.FILTER_ACCEPT;

            return NodeFilter.FILTER_SKIP;
        }
    },
    false
);
var txtNode     = null;

while (txtNode  = txtWalker.nextNode () ) {
    var oldTxt  = txtNode.nodeValue;

    //Find all instances
    match = myRegexp.exec(oldTxt);

    while (match != null) {

        //Get group from match
        var idNum = match[1]

        //Replace current match with added info
        oldTxt = oldTxt.(idNum, idNum+"| <SomeHTMLHere> "+idNum+"    | ");

        //Update text
        txtNode.nodeValue = oldTxt;

        //Check for remaining matches
        match = myRegexp.exec(oldTxt);
    }
}

}, 5000);

现在我想为文本添加更多功能,可能是可单击以复制到剪贴板或插入到其他地方的内容。现在我知道我正在使用原始脚本中的文本节点,但我想知道是否可以调整当前脚本以在这些点插入 HTML 而无需从头开始重写。

该站点的主要问题是这些 ID:##### 我搜索的所有值都出现在同一个元素中,如下所示,因此我可以简单地按元素找到它们(或者至少不是我有限的JS知识)。

<div>
ID: 1234567 | Text
ID: 45678 | Text
</div>

如果有人能给我指出正确的方向,那就太好了,或者至少告诉我不重写是不可能的。

好的,所以重写它实际上效果很好。工作得更好,更简洁。希望这会在将来帮助某人。如果有人想提出任何改进建议,请随意!

setInterval(function() {

//Regex
var reg = /ID:\s(\d*?)\s/gi;
var result;

//Get all classes that this applies to
$('.<parentClass>').each(function(i, obj) {
    var text = $(this).html();

    //Do until regex can't be found anymore
    while (result = reg.exec(text)) {

        //Get first regex group
        var str = result[1];
        //Add in desired HTML
        var newhtml = $(this).html().replace(str, '|<span class="marked">' + str + '</span>|');
        //Replace
        $(this).html(newhtml);
    }
});

//Click function for added HTML
$(".marked").click(function(){

    //Get text inside added HTML
    var id = $(this).text();
    //Construct desired string
    var Str = "someText " + id;
    //Insert into message box
    textarea = document.querySelector('.<inputArea>')
    textarea.value = Str;
    textarea.focus();
});

}, 5000);