【问题标题】:Highlight/select multiple divs with ranges w/ contenteditable?突出显示/选择具有可编辑范围的多个 div?
【发布时间】:2011-06-14 06:04:54
【问题描述】:

假设我有一组contenteditable="true" div。

<div id="0" contenteditable="true"></div>
<div id="1" contenteditable..></div>
<div...etc></div>

我不能有一个 div,多个 div 是必须的。 如何突出显示多个 div 的内容?使用范围?还有什么?

【问题讨论】:

  • @JC0C611:根据 W3C,数字不是 ids 的有效值
  • 这很奇怪,但可以说他们在哪里“_0”,“_1”......等等,那是有效的,对吧?
  • @JC0C611:ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ( "-")、下划线 ("_")、冒号 (":") 和句点 (".") (w3.org/TR/html401/types.html#type-name)
  • 我不明白为什么大声笑,但我可能会稍后解决这个问题
  • @JC0C611:为什么?因为这就是规范中定义令牌的方式。在大多数情况下,您可以避免使用以数字开头的 ID,但某些事情可能无法正常工作(例如使用 ID 选择器设置元素样式)。

标签: javascript contenteditable range


【解决方案1】:

答案是取决于浏览器。请参阅this example 以测试使用 Ranges 的两种方法。第一次尝试为每个可编辑的&lt;div&gt; 创建一个范围,并将它们全部添加到选择中。第二次尝试创建一个包含两个可编辑&lt;div&gt;s 内容的范围。

结果:

  • 在所有浏览器中,用户不可能创建一个包含多个可编辑元素的选择;
  • Firefox 是主流浏览器中最宽松的。两种编程方法都有效。
  • Safari 和 Chrome 是最宽松的:这两种方法都不会从多个可编辑元素中选择内容。
  • Opera 11 不支持选择中的多个 Range,但支持跨越多个可编辑元素的选定 Range。
  • IE pre-version 9 不支持 DOM Range 或与其他浏览器相同的 Selection API,但等效的 TextRange 代码不允许从多个可编辑元素中进行选择。

【讨论】:

  • 非常感谢!我想知道是否可以使用背景 div 和 javascript 来模拟范围......
  • 我会继续选择这个作为接受的答案,并创建另一个关于如何用 div 和 JS 模拟范围的问题。
  • @JCOC611:与其说是你要模仿的范围,不如说是选择。创建尽可能多的范围可以正常工作,问题在于选择它们。
【解决方案2】:

由于在其中一个中开始选择,因此可以即时将 div 切换为 contenteditable="false"。像这样的东西给了你这个想法(使用 JQuery):

$('div').bind("selectstart", function() {
    $('div').attr("contenteditable", false);
});​

Here's a fiddle to demonstrate(仅在 Chrome 中测试)。

请注意小提琴示例中的第一个 ContentEditable Div 获得焦点。这使您可以像往常一样打字,但是一旦您使用鼠标或键盘选择任何内容,您就会看到您可以像往常一样将选择范围扩展到 div。

这显然需要充实以适用于多个浏览器并适当地返回contenteditable="true"。但我认为这种方法是有效的。

【讨论】:

  • 在此添加一个 onclick -> contenteditable = true 并且你已经完成了一半(这就是我在 atm 的位置)
  • 它帮助了我..有一个问题..我按照@Prozi 所说的那样做,但它没有在我可以添加的位置显示光标,但光标不存在?任何解决方案?演示:jsfiddle.net/T7b3r/55
  • 这是一个巧妙的小技巧,比构建复杂的选择要简单得多。
  • 我通过在 'mouseup' 上设置 'contenteditable'=true 来实现这个功能。如果没有选择,我还需要实现一个函数来关注当前元素。我从 'mouseup' 上的选定 div 中选取了“data-div-id”并聚焦该元素。请注意,必须先重新激活 'contenteditable'=true,否则无法专注于该元素。
猜你喜欢
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多