Javascript bookmarklet导致页面变为空白

Javascript bookmarklet导致页面变为空白,javascript,html,bookmarklet,Javascript,Html,Bookmarklet,我正在创建一个JavaScript bookmarklet来切换页面上HTML元素的可见性,但似乎隐藏该元素很麻烦: 代码: 我是一个需要隐藏的部门 我是一段不需要隐藏的文字 我是全世界都必须看到的一句名言 发生的事情是,每点击一次锚定链接,整个页面就会变为空白并显示“无” 当我在中注入完全相同的代码时在JS控制台中,它可以正常工作 这个问题有可能解决吗 getElementById('hideme');a.style 顺便说一下,我会说,因为浏览器与变量名混淆了 此外,守则将是: ge

我正在创建一个JavaScript bookmarklet来切换页面上HTML元素的可见性,但似乎隐藏该元素很麻烦:

代码:


我是一个需要隐藏的部门

我是一段不需要隐藏的文字

我是全世界都必须看到的一句名言
发生的事情是,每点击一次锚定链接,整个页面就会变为空白并显示“无”

当我在
中注入完全相同的代码时
在JS控制台中,它可以正常工作

这个问题有可能解决吗

getElementById('hideme');a.style
顺便说一下,我会说,因为浏览器与变量名混淆了

此外,守则将是:


getElementById('hideme').style.display….

它实际上是在隐藏元素,但它也在紧跟着你的定位点(不知道在哪里)。您可以返回false或falsy值。我将它包装在
void
中,它将返回undefined,但两者都可以工作。这是您的代码笔和代码:


(这也会起作用,但不太干净,国际海事组织):



append void(0)像旧学校一样links@dandavis或者更标准的
返回false返回用于函数内部…内联JS是不好的做法,您应该附加eventlistener。即时通讯手机,你也可以尝试添加“返回错误”。另外,内联CSS也不是很好,你可以添加一个具有disp none的类。@EricG如果OP正在创建一个bookmarklet,正如问题所描述的,那么内联JS正是他需要做的事情来实现它。困惑:第一个类如何与void之后的调用一起工作?(它确实)混淆了2:如果处理程序代码被强制转换为函数,那么返回是有意义的,但是如果函数体一开始没有返回语句,那么为什么将函数体包装为void(…)会影响返回呢?简言之,尾部似乎很重要,但令人惊讶的是,关于javascript中到底发生了什么的文献很少:代码执行。@Dandavi很有趣。一开始我没有注意到。我找不到任何信息——现在这已经是离题了——但如果我能猜一猜的话:
void
是一个不需要括号的特殊运算符。我假设引擎将它们撕开,类似于:
void function(){/*…*/}()
。您可以看到
typeof
的工作方式是相同的:
typeof(function(){return'hi';})(
返回
“string”
而不是
类型错误
。。。就好像在计算
typeof function(){return'hi';}()
而不是
“string”()我会买的。firefox与第二个版本有问题,但chrome在不发送到空白页面方面做得很好。。。
getElementById('hideme');a.style
<a href="javascript:void(function(){ var a = document.getElementById('hideme'); a.style.display='none'; })();">Click me to hide the div.</a>
<a href="javascript:var a=document.getElementById('hideme'); a.style.display='none'; return false;">Click me to hide the div.</a>