Действительно, Chrome действительно изменяет активный выбор после события mouseup.
Вы можете добавить к этому событию хакерский таймаут, который может иногда прерываться ...
Или вы можете использовать событие 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>