Javascript 单击事件时getSelection()API的行为

Javascript 单击事件时getSelection()API的行为,javascript,html,css,selection,Javascript,Html,Css,Selection,如果我从这个div中选择全文,那么输出将是“abc1234”。当我在“c”和“1”之间单击时,输出应为“abc”。但它返回先前突出显示的文本(在本例中为“abc1234”)。如果我再次单击同一位置,它将返回预期的输出(在本例中为“abc”)。有什么方法可以在第一次单击时获得预期的输出吗 $('testsubject')。在('click',function()上{ var sel=window.getSelection(); console.log(sel.toString()); }); /

如果我从这个div中选择全文,那么输出将是“abc1234”。当我在“c”和“1”之间单击时,输出应为“abc”。但它返回先前突出显示的文本(在本例中为“abc1234”)。如果我再次单击同一位置,它将返回预期的输出(在本例中为“abc”)。有什么方法可以在第一次单击时获得预期的输出吗

$('testsubject')。在('click',function()上{
var sel=window.getSelection();
console.log(sel.toString());
});
//开始选择整个文本
常数范围=新范围();
range.selectNode($('.testsubject')[0]);
window.getSelection().addRange(范围)


abc1234
你能试试这个例子吗:

import $ from "jQuery";
$(document).on('selectionchange', function(){
  var sel = window.getSelection();
  console.log(sel.toString(),sel.type);
}); 


如果您只需要跟踪
.test subject
element

中的选择,那么您的预期输出是什么?假设现在突出显示“abc1234”。现在我在c和1之间点击,我应该得到“abc”。但我得到的是“abc1234”,这是之前突出显示的文本。如果我在c和1之间再次单击,我将得到“abc”。我的问题是,有没有什么方法可以让我在第一次点击时(在c和1之间)获得“abc”?我无法在macOS(FF和Chrome)上复制,这里的行为是预期的。不起作用@DraganSIMO如果在“c”和“1”之间单击(即使使用shift键),您将永远不会得到“abc”作为选择。由于您可以通过将光标拖动到文本上来更改选择,“单击”处理程序不是处理选择的最佳方式(在给定的情况下,不会检测到选择更改),因此我得到的输出与“单击”事件相同。假设当前未选择任何文本。我在“a”和“b”之间单击。然后,焦点偏移将为1。现在,选择“abc”,焦点偏移量将为3abc'现在突出显示。如果我在“a”和“b”之间单击,现在焦点偏移量将为“0”。不过,它应该是“1”。如果我再次单击同一位置,则api返回正确的/预期的值,即“1”。我必须点击两次才能让它工作。但我希望这是在第一次单击/selectionchange事件中发生的。如果单击现有选择,getSelection()将返回type=“无”。对于下一次单击,您将获得type=“插入符号”。不确定您是否可以更改此行为。可能尝试在同一事件上重新触发同一单击事件(尝试过,但在我的测试代码中不起作用)。
import $ from "jQuery";
$(document).on("selectionchange", function () {
  var sel = window.getSelection();
  if ($(sel.anchorNode).closest(".test-subject").length > 0) {
    console.log(sel.toString(), sel.type);
  }
});