首选感谢进来帮助我的大侠们!谢谢!
给的分也许不多,我也会经常帮助大家的。我做过WEB几年,手游及网游也弄过大半年。
我的目的是想做一个HTML代码着色的功能。我现在想在DIV内onkeyup后,将里面的内容进行一次更换,例如:
var a=div.innerHTML;
div.innerHTML = a.replace(/<br>/ig, "<br />");
这样进行赋值后,光标就会失去,我想这样操作后将光标还原到,按键松开时的那个位置。查阅无数资料,终无法解决,希望有经验的大侠们帮帮我了。现在存在的问题:
1. 如果光标停留到行末,则会自动跳到下一行的首部
2. 在没有滚动条的情况下,我定位都正确了,可一但出现滚动条就不知道怎么办了。。源码如下:
var oSel = document.selection.createRange();
var pos = {x:oSel.offsetLeft, y:oSel.offsetTop};// 颜色分析,并进行着色
divHtml.innerText = this.parseColor(divHtml.innerText);
divHtml.innerHTML = this.enforceColor(divHtml.innerHTML);var rng = event.srcElement.document.selection.createRange();
rng.moveToPoint(pos.x-1, pos.y);
rng.select();
给的分也许不多,我也会经常帮助大家的。我做过WEB几年,手游及网游也弄过大半年。
我的目的是想做一个HTML代码着色的功能。我现在想在DIV内onkeyup后,将里面的内容进行一次更换,例如:
var a=div.innerHTML;
div.innerHTML = a.replace(/<br>/ig, "<br />");
这样进行赋值后,光标就会失去,我想这样操作后将光标还原到,按键松开时的那个位置。查阅无数资料,终无法解决,希望有经验的大侠们帮帮我了。现在存在的问题:
1. 如果光标停留到行末,则会自动跳到下一行的首部
2. 在没有滚动条的情况下,我定位都正确了,可一但出现滚动条就不知道怎么办了。。源码如下:
var oSel = document.selection.createRange();
var pos = {x:oSel.offsetLeft, y:oSel.offsetTop};// 颜色分析,并进行着色
divHtml.innerText = this.parseColor(divHtml.innerText);
divHtml.innerHTML = this.enforceColor(divHtml.innerHTML);var rng = event.srcElement.document.selection.createRange();
rng.moveToPoint(pos.x-1, pos.y);
rng.select();
解决方案 »
- 关于 jsp 导出Excel (迅雷下载问题)
- new Ajax.Request的问题.路过的帮帮忙.
- ext执行fun函数时怎么写?
- 初入国内500强,有几个js的编程规范不理解,好吧,只要你进来我就告诉你公司名字。。。
- 我想实现marquee每次滚动完成后刷新页面,求高手
- 下来菜单select的问题,请教了~~不胜感激啊~~
- radio的问题!
- 关于网页菜单的制作(在线等待)
- 如果是高手的,快过来,怎么样按F1时出自定义的帮助页面(注意,框架网页哦)
- 关于浮动div居中的问题!急.....
- 如何通过JAVASCRIPT将当前的页面保存到服务器的目录中
- JavaScript中for循环出现了问题,郁闷~~
this.parseColor、this.enforceColor 是什么东西?
“1. 如果光标停留到行末,则会自动跳到下一行的首部” 末行怎么还有下一行?
<div id="div1">
<br>
<textarea id="ta" onclick="getActiveElement()">
abc
<br>
</textarea>
</div>
<button onclick="setDiv(false);" >无焦点</button>
<button onclick="setDiv(true);" >有焦点</button>
<span id="sp"></span><script type="text/javascript">
function $(id){ return document.getElementById(id)}
var active;
var activeId;function getActiveElement(){
active=document.activeElement;
activeId=document.activeElement.id;
showFocus();
}
function showFocus(){
if (document.activeElement){
$('sp').innerText='focus id is: ' + document.activeElement.id;
}
}
function setDiv(bFocus){
var div = $('div1');
var newTag = div.innerHTML.replace(/\<br\>/ig, "");
div.innerHTML = newTag;
if (bFocus ){
// div 的 innerHTML 被被赋值后,里面的对象要重新获取
// 估计是被赋值后,内部已经不是原先的对象了。
var newActive =$(activeId);
alert(newActive) //一定要alert 后才能获取焦点,不清楚原因
newActive.focus();
}
else{
active.focus();
}
showFocus();}
// div 的 innerHTML 被被赋值后,里面的对象要重新获取
// 估计是被赋值后,内部已经不是原先的对象了。
var newActive =$(activeId);
document.getElementById("newActive ")style.display = "none";
document.getElementById("newActive ")style.display = "block";
newActive.focus();
}
这样试试看可以不
停留在行末,我把offsetLeft-1就实现了,原理我不知道,我只知道这样可以
这种方法解决了滚动条的问题,但是出现了一个新问题:就是光标由方向箭移动到行首时会自动的前移到上一行的行末希望大家能帮帮分析下如何解决,我也在积极尝试。
再次谢谢各位。以下是测试代码,已经通过剩下的就是解决如何能将光标停在行首var oSel = document.selection.createRange();
oSel.moveStart("character", parseInt(divHtml.innerText.length) * -1);
var p = oSel.text.length;// 颜色分析,并进行着色
divHtml.innerText = this.parseColor(divHtml.innerText);
divHtml.innerHTML = this.enforceColor(divHtml.innerHTML);var rng = event.srcElement.document.selection.createRange();
var rows = getRows(divHtml.innerText.substr(p)); // 获得光标之前的行数(即换行符数量)
var tar = (parseInt(divHtml.innerText.length) - p) * -1 + rows;
rng.moveStart("character", tar);
rng.moveEnd("character", tar);
rng.select();