在contenteditable中取消选择后,范围文本相同

时间:2018-10-01 03:24:05

标签: javascript html selection contenteditable

我在contenteditable中有一个“ mouseup”事件处理程序,可检查是否选择了文本。如果在键入后突出显示文本,则一切都很好,但是如果再次单击(取消选择文本),则控制台将显示range.toString()是相同的,尽管没有选择任何文本。

http://jsfiddle.net/xpvt214o/857876/

在contenteditable中键入一些内容,然后选择它,然后再次单击(取消选择)并检查控制台。两个console.logs将相同。

我需要区分实际选择和取消选择。如果这是正常行为,那么我该如何区分这两个事件,或者如何以不同的方式来防止这种情况发生?

2 个答案:

答案 0 :(得分:2)

实际上,Chrome会在鼠标事件后 更改活动选择。

您可以在此事件中添加黑客超时,这可能会中断一些时间...

或者您可以使用Selection API的selectionchange事件。

每次选择更改时都会触发此事件:

$(document).on('selectionchange', function() {
  console.log(getSelection().toString());
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div contenteditable="true" id="container">Select this dummy text</div>

增加的好处是它也可以用于键盘选择。

要了解此事件是选择还是取消选择,您可以检查选择内容是否为空,或者当前范围是否合拢:

$(document).on('selectionchange', function() {
  var isUnselect = getSelection().getRangeAt(0).collapsed;
  viewer.style.backgroundColor = isUnselect ? 'red' : 'green';
})
#viewer{
  width: 20px;
  height: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="viewer"></div>
<div contenteditable="true" id="container">Select this dummy text</div>

答案 1 :(得分:0)

请检查是否有帮助。

$TemplateJSON = Convertfrom-json ([IO.File]::ReadAllText("TemplateJSON.json"))
$RoleFile = Import-CSV "CSVFile.csv" -Delimiter ','
[int]$Row = 0

Foreach ($Line in $RoleFile)
{    
    $Row = $Row + 1
    $NewJSON = $TemplateJSON
    $NewJSON.adhocUARs =  $Line.ResourceName
    $NewJSON.roleFullPath= $Line.RoleFullPath    

    $RolePath = "D:\\DummyFolder\"
    $JSONPath = $RolePath + "patch.json"  
    Convertto-JSON $NewJSON | Out-file -Encoding "UTF8" $JSONPath
 }