当前位置: 首页 > 面试题库 >

CSS::contenteditable中元素的焦点

许涵容
2023-03-14
问题内容

如果您具有以下HTML:

<div contenteditable="true">
  <p>The first paragraph</p>
  <p>The second paragraph</p>
</div>

有没有一种办法风格,正在编辑不同于所有其他段落的段落divcontenteditable

div > p:focus { border: 1px solid red }

不会应用于正在编辑的段落。

如何为 正在编辑段落<p>-tag)设置不同的样式?

我希望使用仅CSS的解决方案,但也许我必须使用JavaScript。

编辑:

由于找不到纯CSS解决方案(:hover对我来说,使用不是真正的解决方案),我现在正在寻找一些JavaScript行来设置class="focus"要编辑节点上的属性。


问题答案:

我想我找到了解决方案。

通过以下代码片段,您可以在选择更改时将父元素置于当前插入符号位置。

var selectedElement = null;
function setFocus(e) {
  if (selectedElement)
    selectedElement.style.outline = 'none';

  selectedElement = window.getSelection().focusNode.parentNode;
  // walk up the DOM tree until the parent node is contentEditable
  while (selectedElement.parentNode.contentEditable != 'true') {
    selectedElement = selectedElement.parentNode;
  }
  selectedElement.style.outline = '1px solid #f00';
};
document.onkeyup = setFocus;
document.onmouseup = setFocus;

在这里,我outline手动更改属性,但是您当然可以添加类属性,并通过CSS设置样式。

您仍然必须手动检查该属性是否selectedElement是我们的子级。但我认为您可以掌握基本思路。<div>``contenteditable

编辑:我更新了代码以及JSFiddle,使其也可以在Firefox和Internet Explorer9+中使用。不幸的是,这些浏览器没有onselectionchange事件处理程序,因此我不得不使用onkeyuponmouseup



 类似资料:
  • 问题内容: 我正在构建React组件。正如React背后的一位专家在本次精彩的演讲中所建议的那样,我已经在组件中添加了CSS内联。我一直在努力寻找一种方法来内联添加CSS伪类,就像在演示文稿中名为“ :: after”的幻灯片上一样。不幸的是,我不仅需要添加该属性,还需要添加该属性。幻灯片显示了如何通过添加内容,但是如何添加其他属性? 问题答案: 得到了@Vjeux在React团队的回复: 普通H

  • 如何在Elm中设置Html元素的焦点?我试图在元素上设置自动聚焦属性,它只在页面加载上设置焦点。

  • 主要内容:1. ::after,2. ::before,3. ::first-letter,4. ::first-line,5. ::selection,6. ::placeholder伪元素是一个附加在选择器末尾的关键词,通过伪元素您不需要借助元素的 ID 或 class 属性就可以对被选择元素的特定部分定义样式。例如通过伪元素您可以设置段落中第一个字母的样式,或者在元素之前、之后插入一些内容等等。 在 CSS1 和 CSS2 中,伪元素的使用与伪类相同,都是使一个冒号 与选择器相连。但在 C

  • CSS伪元素是用来添加一些选择器的特殊效果。 语法 伪元素的语法:selector:pseudo-element {property:value;} CSS类也可以使用伪元素:selector.class:pseudo-element {property:value;} :first-line 伪元素 "first-line" 伪元素用于向文本的首行设置特殊样式。 在下面的例子中,浏览器会根据 "

  • 问题内容: 我有两个要素并列。元素2小于元素1。两个元素都不具有固定的高度。我需要将元素2垂直居中。如何使用CSS做到这一点? 编辑: 这是我到目前为止的内容: img1的高度将始终大于img2的高度。我希望img2垂直居中对齐。希望这可以澄清我要完成的工作。 问题答案: 最简单,最干净的方法是使用并垂直对齐。但是,IIRC(自从我开始浏览器兼容性问题以来已经有一段时间了)……也许某些普通版本的I

  • 问题内容: 是否可以使用该方法将div(或其他任何元素)聚焦? 我已经将tabIndex设置为div元素: 当我单击它时,我可以看到它被聚焦,但是,我试图动态地聚焦这样的元素: 或像这样: 但是触发事件时,组件不会获得焦点。我怎样才能做到这一点?我还有其他(非输入)元素可以使用吗? 编辑: 好吧,看来这实际上是有可能做到的:https : //jsfiddle.net/69z2wepo/54201