Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试替换文档上的每个href_Javascript - Fatal编程技术网

Javascript 尝试替换文档上的每个href

Javascript 尝试替换文档上的每个href,javascript,Javascript,我对Javascript一无所知,我想创建一个Greasemonkey脚本,在文档的所有href元素上将“/text/othertext/”替换为“/text2/text3”。这就是我想到的,正如预期的那样,它不起作用: var links=document.getElementsByTagName('a'); 对于(i=0;i我不太确定为什么代码不能工作 我已经整理了下面的片段,这可能会有所帮助 (函数(){ var-anchors=document.querySelectorAll('a

我对Javascript一无所知,我想创建一个Greasemonkey脚本,在文档的所有href元素上将“/text/othertext/”替换为“/text2/text3”。这就是我想到的,正如预期的那样,它不起作用:

var links=document.getElementsByTagName('a');

对于(i=0;i我不太确定为什么代码不能工作

我已经整理了下面的片段,这可能会有所帮助

(函数(){
var-anchors=document.querySelectorAll('a');
对于(var i=0;i
a{
显示:块;
}

此代码有效。您的代码看起来也不错。也许您是在文档元素之前加载脚本?请注意我的元素是如何在脚本之前列出的:

<a href="before">link</a>
<a href="before">link</a>
<script>
    var links = document.getElementsByTagName('a');
    for(var i = 0; i < links.length; i++) {
        var href = links[i].getAttribute('href');
        href = href.replace('before', '#');
        links[i].setAttribute('href', href);
    }
</script>

最简单的解决方案是将代码包装为:

window.onload = function(){
    /* your code here */
};
这将确保在加载整个页面(包括文本、图像等)之前,不会加载您的代码(特别是如果您已将脚本放置在文档的中)。

window.onload=function(){
document.body.innerHTML=document.body.innerHTML
.替换('

它对我有效:。加载DOM后是否运行脚本,例如在
窗口中。onload
?我尝试将其作为Greasemonkey脚本运行,我尝试通过添加警报(gethref)对其进行调试;显然,它并没有在页面上存储所有链接,可能只是firefox阻止了垃圾邮件警报…
link
元素还使用
href
指向样式表等资源,不确定其他人也做了什么。这就是我需要替换的示例:
我需要将“.”替换为“.”尝试使用
window.onload=function(){var anchors=document.queryselectoral('a');for(var i=0;i
链接仍然没有改变,如果我能得到任何帮助,我愿意提供我的skype来共享桌面…嘿@Manuestaire,你的脚本文件在哪里加载到DOM?我个人会避免
窗口。onload
并使用我在生活中编写的代码。(安全包装功能)这样它就可以运行了。但是,请确保你的脚本标记是所有链接之后正文中的最后一个元素。希望这能帮助你。也尝试过了,链接仍然没有改变…(我正在修补,如果有人感兴趣,我可以流式传输我的screan throw twitch)@Manuestaire请现在重试(添加了
窗口。onload
).好的,我知道我遗漏了什么,你能看一下我的编辑吗?@Manuestaire我相信你的编辑让这个问题变得更复杂。似乎你需要倾听DOM本身的变化,所以也许这篇文章可以帮助你解决这个问题:我想这超出了我的范围,我已经尝试了
setInterval(function(){var锚定……,2000)
尽管脚本持续运行,但它似乎不会更改下拉菜单出现时出现的新元素。是否将在DOM changes help(DOM更改帮助)中侦听?@ManueStare如果您只想在页面加载后延迟,请使用
setTimeout
方法。请参阅我的编辑。如果在下拉菜单出现后发生这种情况,请侦听DOM命令ges可能是您最有效的计时方式。否则,您可能会导致不必要的延迟,或者更糟糕的是,由于您使用了超时,并且发生得太早,因此错过了事件。
window.onload = function(){
    /* your code here */
};