我希望将名为“mylist”的 .json 列表中的字符串与仅在任何网页上出现的可见字符串进行匹配。匹配的字符串将被替换为下面脚本中的术语“ REPLACED! ”。
最重要的是脚本应该在现代浏览器上运行并且不会降低页面加载性能。所以我很感激任何优化建议!
这是我到目前为止所得到的:
@resource mylist https://example.com/mylist.json
(function(){
var mylist = JSON.parse(GM_getResourceText("mylist"));
var regexp = new RegExp('\\b(' + mylist.join('|') + ')\\b(?!\\)\\))', "gi");
function walk(node) {
var child, next;
switch ( node.nodeType )
{
case 1:
case 9:
case 11:
child = node.firstChild;
while ( child )
{
next = child.nextSibling;
walk(child);
child = next;
}
break;
case 3:
handleText(node);
break;
}
}
function handleText(textNode) {
textNode.nodeValue = textNode.nodeValue.replace(regexp, 'REPLACED!');
}
walk(document.body);
})();
Run Code Online (Sandbox Code Playgroud)
我在这里制作了一个示例: https: //jsfiddle.net/xgnocwbq/ …
我正在为具有此HTML代码块的页面编写用户脚本.
<span id="mediaSetUfiLikeLink">
<button class="like_link stat_elem as_link" title="Like this item" type="submit" name="like">
<span class="default_message">Like</span>
<span class="saving_message">Unlike</span>
</button>
</span>
<span>
<a href="/ajax/sharer/?s=3&appid=2305272732&p[]=1012781954&p[]=2063763" rel="dialog">Share</a>
</span>
Run Code Online (Sandbox Code Playgroud)
我需要id在最后一个 span块中添加一个标签.(下面一个)
<span>
<a href="/ajax/sharer/?s=3&appid=2305272732&p[]=1012781954&p[]=2063763" rel="dialog">Share</a>
</span>
Run Code Online (Sandbox Code Playgroud)
我已经到了这一点使用这个,
document.getElementById("mediaSetUfiLikeLink").getElementsByTagName("span")[1];
Run Code Online (Sandbox Code Playgroud)
我尝试了这样的最后一次span使用nextSibling,返回了null
document.getElementById("mediaSetUfiLikeLink").getElementsByTagName("span")[1].nextSibling;
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?为了再次清楚,我想'获得'访问最后一个span块,以便我可以id为它添加一个属性..
PS - 我需要在不使用jQuery或任何其他外部库的情况下执行此操作.仅限纯JavaScript.
谢谢
我在网站上有很多颜色,我想用usercript更改.想象一下包含1000个不同选择器的CSS文件,每个选择器都有一个颜色.那种特定的颜色是我想要改变的.该颜色的每个实例.用户必须能够动态更改颜色(如使用输入框),因此使用CSS文件更改它将不起作用.
如果它有效,那么我将如何做到这一点:
$("*").replace("#00aba0","#FF0000");
Run Code Online (Sandbox Code Playgroud)
00aba0是我要用FF0000替换的颜色
不幸的是,该方法不可用,但它可以像这样工作.另外,设置一个循环来做string.replace(); 不会起作用,因为它是一个论坛,当你做出新的回复时,它会删除回复框中的文字.
总结一下:
我想用另一种颜色替换颜色的每个实例.有许多实例(比方说500)这种颜色,必须改变.我无法通过替换CSS文件来更改它,并且必须动态更改它.
我不太确定如何将此代码从小书签转换为用户脚本,因为它使用URL编码的字符:
javascript:var%20multiURL="";%20$('div.titlebox').find('ul.subreddits').find('a').each(function()%20{%20multiURL%20+=%20$(this).text().substr(3)%20+%20"+";%20});%20multiURL%20=%20multiURL.substr(0,multiURL.length-1);%20window.open('http://www.reddit.com/r/'+multiURL);void(0);
Run Code Online (Sandbox Code Playgroud)
有想法吗?
javascript ×4
userscripts ×4
bookmarklet ×1
css ×1
dom ×1
html ×1
jquery ×1
json ×1
regex ×1
replace ×1