使用 Javascript 将可编辑内容从 true 更改为 false

Changing editable content from true to false using Javascript

提问人:shastings 提问时间:2/6/2021 最后编辑:shastings 更新时间:2/6/2021 访问量:844

问:

所以我试图用 js 覆盖或取消 contenteditable=“true”,因为据我所知,Notion Enhancer 没有添加 html 文件的选项。他们确实可以选择添加 css 和客户端 javascript,所以我正在尝试使用 js 将 contenteditable 变成 false。我尝试了很多选择,但似乎没有任何效果。有没有人对如何在不接触 HTML 的情况下通过 js 将其变成 false 有任何想法?

这是 html 标记。

  <div style="display: flex; width: 100%; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Helvetica, &quot;Apple Color Emoji&quot;, Arial, sans-serif, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;; font-weight: 600; font-size: 1.5em; line-height: 1.3; color: inherit; fill: inherit;">
    <div contenteditable="true" spellcheck="true" placeholder="Heading 2" data-root="true" class="notranslate" style="max-width: 100%; width: 100%; white-space: pre-wrap; word-break: break-word; caret-color: rgb(55, 53, 47); padding: 3px 2px;">Monday</div>
  </div>
</div>

正如我所说,HTML 是不可协商的,所以一切都必须通过 css 或 js。我想使 contenteditable false 来更改标题周围的填充。

JavaScript HTML CSS 内容可编辑 客户端

评论

0赞 Yuan-Hao Chiang 2/6/2021
小提琴对我来说很好用,我无法编辑标签。contenteditable
0赞 NineBerry 2/6/2021
您链接到的小提琴已经起作用。无法编辑内容。请再检查一次。
0赞 shastings 2/6/2021
@NineBerry 对不起,也许我只是傻了,但我有点困惑。没有办法在不接触html的情况下将contenteditable=true更改为false?比如,让 contenteditable=true 并通过 js 将其设为 false。否则我不知道如何覆盖 contenteditable。我正在尝试这样做,以便我可以向 notranslate 类添加填充。
0赞 shastings 2/6/2021
@Yuan-HaoChiang:我想我的问题不清楚。从本质上讲,我想用我自己的 css 覆盖 contenteditable 以更改填充,因为我无法更改概念中的 html。不过,我可以添加css / js文件,所以这就是为什么我试图弄清楚如何使用css或js来做到这一点。或两者兼而有之。
0赞 NineBerry 2/6/2021
您已经通过链接到的 Fiddle 中的 javascript 将 contentEditable 更改为 false。

答:

0赞 brunoff 2/6/2021 #1

如果您只想引用这个特定的 div,也许我们应该使用占位符来定位它:

document.querySelector('div[placeholder="Heading 2"]').contentEditable=false;

在这里测试,在 firefox 中吃得最少,contentEditable 在设置时必须在 Editable 上有大写字母 E。

评论

0赞 shastings 2/6/2021
但是之后我可以通过 css 或 js 设置占位符的样式吗?因为它仍然对我不起作用。我本质上是在尝试更改填充,但由于内容可编辑,我不能。因此,如果我将其渲染为假,我想我可以使用占位符进行自己的样式设置。
0赞 brunoff 2/6/2021
是的你可以。例如:将像更改标志之前一样工作document.querySelector('div[placeholder="Heading 2"]').style.backgroundColor='yellow';contentEditable
0赞 NineBerry 2/6/2021 #2

因此,这里的问题与属性无关。contentEditable

问题在于 html 代码中的标记包含一个属性,该属性已指定 的值。html 代码中指定的这些值的优先级高于 css 中指定的规范。divstylepadding

可能的解决方案 1:

使用 css 中的标记让 css 中的定义覆盖该规则的代码中所做的填充设置:!important

.notion-sub_header-block .notranslate {
  background-color: #fed2e4;
  width: auto;
  position: relative;
  padding:30px !important;
}

解决方案 1 的小提琴

可能的解决方案 2:

使用 JavaScript 从 html 标记的属性中删除 。paddingstyle

var editableElements = document.querySelectorAll("[class=notranslate");
    
for (var i = 0; i < editableElements.length; ++i) {
  editableElements[i].style.padding = "";
}

解决方案 2 的小提琴

在这种情况下,解决方案 1 更优雅,因为不需要 JavaScript。

1赞 Kalki222 2/6/2021 #3
document.getElementById("table").contentEditable = "true";