Javascript用户脚本-查找和替换:textnodes和HTML

时间:2018-10-13 10:08:49

标签: javascript replace userscripts tampermonkey

我试图创建一个用户脚本(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>

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

1 个答案:

答案 0 :(得分:0)

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

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);