!变量在javascript中不起作用

!变量在javascript中不起作用,javascript,Javascript,我有一个带有代码的javascript:bookmarklet javascript:document.body.contentEditable = !document.body.contentEditable; 它应该打开和关闭页面的“编辑器”(仅用于朋友的恶作剧等)。但它并没有达到预期的效果,当我点击书签时什么也没发生。打开Javascript控制台,我看到: document.body.contentEditable "false" !document.body.contentEd

我有一个带有代码的
javascript:
bookmarklet

javascript:document.body.contentEditable = !document.body.contentEditable; 
它应该打开和关闭页面的“编辑器”(仅用于朋友的恶作剧等)。但它并没有达到预期的效果,当我点击书签时什么也没发生。打开Javascript控制台,我看到:

document.body.contentEditable
  "false"
!document.body.contentEditable
  false

之前,我使用了
javascript:document.body.contentEditable=true
这使页面可编辑,但我无法将其关闭。

contentEditable的值是字符串,而不是布尔值。它可以有值
“true”
“false”
“inherit”
(因此它不能是简单的布尔值)。一个布尔反转是行不通的。您需要显式分配这三个字符串中的一个。

就像您可能在JavaScript控制台中注意到的那样,
document.body.contentEditable
是一个字符串,而不是布尔值。您可以这样做:

document.body.contentEditable = !(document.body.contentEditable == "true");
或者只是

document.body.contentEditable = document.body.contentEditable != "true";
HtmleElement.contentEditable属性用于指示 或者该元素不可编辑。此枚举属性可以具有 以下数值:

  • “true”表示元素是可编辑的
  • “false”表示无法编辑该元素
  • “继承”表示元素继承其父元素的可编辑状态

document.body.contentEditable
是一个字符串值,JavaScript认为非空字符串是真实的

!"" == true
!"a" == false

contentEditable是文本输入吗?因此,您需要将texto解析为布尔值:

javascript:document.body.contentEditable = !JSON.parse(document.body.contentEditable); 
deceze在这里是正确的,我(有点愚蠢)认为,因为你这样做
document.body.contentEditable=true
您也可以这样做
!document.body.content可编辑
但这是不对的

最后,我决定使用实际上是布尔值的属性,如下所示:

document.body.contentEditable=!document.body.isContentEditable

在控制台中键入此选项(如果启用):
typeof document.body.contentEditable