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