Javascript 有没有可能计算出p';是否发生了鼠标单击事件?
我有一个包含文本的Javascript 有没有可能计算出p';是否发生了鼠标单击事件?,javascript,jquery,html,textarea,mouseevent,Javascript,Jquery,Html,Textarea,Mouseevent,我有一个包含文本的。当点击时,我创建了一个,其中包含中的文本。有没有可能计算出点击发生在文本的哪个位置,并将的光标移动到同一点?我不这么认为,没有。DOM只知道哪个元素接收到点击事件,它不区分包含元素中的文本片段,除非它们本身就是元素。我怀疑你是否想用自己的元素标记来包装文本中的每个字符:)我猜这需要相当多的修改才能正确,而你也不可能完全正确。但您可能需要使用event.clientX和event.clientY 编辑--当我回答时,我不知道这件事。看起来很可能完全正确。 另一个想法是:设置文
。当点击
时,我创建了一个
,其中包含
中的文本。有没有可能计算出点击发生在文本的哪个位置,并将的光标移动到同一点?我不这么认为,没有。DOM只知道哪个元素接收到点击事件,它不区分包含元素中的文本片段,除非它们本身就是元素。我怀疑你是否想用自己的元素标记来包装文本中的每个字符:)我猜这需要相当多的修改才能正确,而你也不可能完全正确。但您可能需要使用event.clientX和event.clientY
编辑--当我回答时,我不知道这件事。看起来很可能完全正确。
另一个想法是:设置文本区域的样式,使其看起来像纯文本,并在单击时重新设置样式,使其看起来像表单字段。希望这个简单的示例有帮助:
<html>
<head/>
<body>
<script type='text/javascript'>
function getPosition()
{
var currentRange=window.getSelection().getRangeAt(0);
return currentRange.endOffset;
}
function setPosition(elemId, caretPos) {
var elem = document.getElementById(elemId);
if(elem != null) {
if(elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', caretPos);
range.select();
}
else {
if(elem.selectionStart) {
elem.focus();
elem.setSelectionRange(caretPos, caretPos);
}
else
elem.focus();
}
}
}
function test()
{
setPosition('testId', getPosition());
}
</script>
<p onclick = 'test()'>1234567890</p>
<textarea id='testId'>123467890</textarea>
</body>
</html>
函数getPosition()
{
var currentRange=window.getSelection().getRangeAt(0);
返回电流范围.endOffset;
}
功能设置位置(elemId、caretPos){
var elem=document.getElementById(elemId);
if(elem!=null){
if(元素createTextRange){
var range=elem.createTextRange();
range.move('character',caretPos);
range.select();
}
否则{
如果(元素选择开始){
元素焦点();
元素设置选择范围(caretPos,caretPos);
}
其他的
元素焦点();
}
}
}
功能测试()
{
setPosition('testId',getPosition());
}
1234567890
123467890
或者您可以使用第三方JS库,如jQuery—请参阅。ooo,我喜欢这种替代方案。在未来的发展中,我可能不得不对此进行修补。好主意:textarea样式。这也是我想到的最好的事情,但我仍然看到一些缺点,例如,当在
中输入多个段落时,以后可能需要将其拆分为单独的
。看来我会在这方面或那方面妥协。@Yeti的回答似乎与你所说的相矛盾,David。这也是我不知道的。@morgancodes:我当然希望雪人的解决方案能奏效。我得留着它,以防我遇到同样的事情:)@jpalecek塞维利亚的理发师用jQuery?@peter@jpalecek那个雕像。我们现在能停止吗?谢谢你的回答!我真的希望这能奏效;希望在接下来的几天里有机会尝试一下。