Javascript-为什么在选择开始时使用removeAllRAnges()?

我有这段代码在工作,我只想了解为什么我一开始需要使用removeAllRanges. sel初始化时是否自动有范围?

function setCaret(boolean_position) {
   var range = document.createRange();
   var sel = window.getSelection();
   range.selectNodeContents($('#board_code')[0]);
   range.collapse(boolean_position);
   sel.removeAllRanges();
   sel.addRange(range);//setting the caret position
} 

解决方法:

是的,从window.getSelection()检索的选择不是一个空实例,如document.createRange()创建的范围.请注意,这些方法名称有所不同-一种创建新实例,另一种获取实例.

原因很简单-您可以有多个范围实例,每个实例包含不同的位置.但是每个文档只有一个选择.

因此,在添加范围之前,通常必须删除当前选择的旧范围.当然,除非您要扩展当前选择.

更新:正如Tim正确指出的那样,只有Firefox支持多个选择范围.这意味着只有在Firefox上,您才能一次选择多个DOM.您可以选择表的列或使用CTRL键添加更多选择.

因此,只有Firefox要求您在添加下一个之前执行removeAllRanges().其他浏览器将自动删除旧范围.

上一篇:如何使用xsel获取选定的文本-Python


下一篇:javascript-在D3强制布局中自动缩放对象