【问题标题】:Detect weather user clicked on text or white space inside textarea检测天气用户点击文本区域内的文本或空白区域
【发布时间】:2020-12-20 02:46:17
【问题描述】:

我有一个可以拖动的文本区域,其中的文本仍然可以通过拖动来选择。为了区分“文本拖动”和“移动拖动”,我必须知道用户开始拖动的点(即鼠标按下位置)是空白或文本。

我唯一能想到的就是使用字符宽度和行高来计算,我想避免这种情况。

【问题讨论】:

  • 也许您可以通过在 textarea 下放置一个 div 并从 textarea(文本周围的空间)中删除空白来重新创建空白
  • 只需添加一个拖动手柄......你想做的事情在这么多边缘情况下都会失败。
  • @epascarello 你的意思是调整大小的句柄?那不是我需要的

标签: javascript html textarea


【解决方案1】:

不太确定你在问什么,但这是我将这种疯狂转化为工作代码的尝试:

let doc, htm, bod, I; // for use on other loads
addEventListener('load', ()=>{
doc = document; htm = doc.documentElement; bod = doc.body; I = id=>doc.getElementById(id);
// magic under here
const test = I('test');
function whiteStart(string){
  if(string.match(/^\s+/)){
    return true;
  }
  return false;
}
test.oncopy = test.ondragstart = function(){
  let s = getSelection().toString();
  if(whiteStart(s)){
    console.log('"'+s+'" starts with one or more white spaces');
  }
  else{
    console.log('"'+s+'" starts without a white space');
  }
}
}); // end load
<div id='test'>I'm just going to put some text in here so we can run a very basic test. I hope this helps!</div>

【讨论】:

  • “空白”(不是“空白”)是指空白,即文本中没有字符的部分(例如,没有到最后的行的右侧)。
  • /^\s+/ 是一个正则表达式,用于以一个或多个空格开头。你真正想要完成什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多