我试图创建一个用户脚本(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>
如果有人可以向我指出正确的方向,那就太好了,或者至少告诉我,没有重写就不可能了。
答案 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);