【问题标题】:Javascript userscript - Find and replace: textnodes and HTMLJavascript 用户脚本 - 查找和替换:文本节点和 HTML
【发布时间】:2018-10-14 06:12:29
【问题描述】:

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

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

【问题讨论】:

    标签: javascript replace userscripts tampermonkey


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 1970-01-01
      相关资源
      最近更新 更多