呵呵,太感谢了,我修改了一下,在FF下就不会出现无法修改回车后输入的内容的颜色了<script> function test() { edit_div_obj=document.getElementById('edit_div'); if(window.getSelection) { var sel = window.getSelection(); var nodes=edit_div_obj.childNodes; //获取edit_div_obj下的所有节点 var nodes_num=nodes.length;
rang.style.foreColor="#0066cc";
var sel = window.getSelection();
sel.removeAllRanges()
sel.addRange(range)//这个参数就是你的range
document.execCommand('ForeColor',false,'#0066cc');
<div id="rang"><div>
document.getElementById("rang").style.color="#0066cc";
function test()
{
edit_div_obj=document.getElementById('edit_div');
if(document.createRange) //ff下创建range
{
var edit_div_range=document.createRange();
}
else //IE下创建range
{
var edit_div_range=document.body.createTextRange();
}
/******************这是ff下处理方法
edit_div_range.selectNode(edit_div_obj);
//下面语句执行不成功
edit_div_range.execCommand('ForeColor',false,'#0066cc');
*/
/*******************这是IE下的处理方法 下面代码在IE可以执行成功
edit_div_range.moveToElementText(edit_div_obj);
edit_div_range.execCommand('ForeColor',false,'#0066cc');
*/
}
</script>
<div id="edit_div" class='input-class2' contentEditable=true >
gfcgcgf
</div> <input id="button1" type="button" value="测试" onclick="javascript:test();" />
document.execCommand('forecolor',false,'blue');
这个在FF下根本不能执行!
错误提示edit_div_range.execCommand is not a function
<DIV id="test" contentEditable="true">abcde</DIV>
<SCRIPT>
var input = document.getElementById('test');
var sel = window.getSelection();
sel.collapse(input.childNodes[0], 0);
sel.extend(input.childNodes[0], 2);
document.execCommand('forecolor',false,'#0066cc');
</SCRIPT>
function test()
{
edit_div_obj=document.getElementById('edit_div');
if(window.getSelection)
{
var sel = window.getSelection();
sel.collapse(edit_div_obj, 0);
sel.extend(edit_div_obj, 1);
document.execCommand('forecolor',false,'#0066cc');
sel.collapse(edit_div_obj, 0);
}
else
{
var edit_div_range=document.body.createTextRange();
edit_div_range.moveToElementText(edit_div_obj);
edit_div_range.execCommand('forecolor',false,'#0066cc');
}
}
</script>
<div id="edit_div" class='input-class2' contentEditable=true >
gfcgcgf
</div>
<input id="button1" type="button" value="测试" onclick="javascript:test()" />
楼主你的代码中有很多错误,FF是没有createtextRange方法的,代码执行到那就失败了,我修改了,可以了
同时问一下:sel.extend(edit_div_obj, 1);这句什么意思?从网上查不到啊!第二个参数是上面意思?
谢谢!
sel.extend同理
我这边有一片搏客,论述了如何在DIV中设置光标位置,这种场景下无非就是其实位置=结束位置的特殊情况,你参考一下
http://blog.csdn.net/reedseutozte/archive/2010/08/01/5780403.aspx
function test()
{
edit_div_obj=document.getElementById('edit_div');
if(window.getSelection)
{
var sel = window.getSelection();
var nodes=edit_div_obj.childNodes; //获取edit_div_obj下的所有节点
var nodes_num=nodes.length;
sel.collapse(edit_div_obj, 0);
sel.extend(edit_div_obj, nodes_num);
document.execCommand('forecolor',false,'#0066cc');
sel.collapse(edit_div_obj, 0);
}
else
{
var edit_div_range=document.body.createTextRange();
edit_div_range.moveToElementText(edit_div_obj);
edit_div_range.execCommand('forecolor',false,'#0066cc');
}
}
</script>
<div id="edit_div" class='input-class2' contentEditable=true >
gfcgcgf
</div>
<input id="button1" type="button" value="测试" onclick="javascript:test()" />我的理解是:
sel.collapse(edit_div_obj, i); 这个设置是指sel从edit_div_obj的第i个节点开始。
sel.extend(edit_div_obj, j); 这个设置是指sel在edit_div_obj的第j个节点结束。
即sel表示的范围为从edit_div_obj的第i个节点到第j个节点。
document.execCommand('forecolor',false,'#0066cc'); 这个是对范围sel执行execcommand();
但仍然不清楚为什么这里的execcommand是对这个sel进行操作的呢?
望帮忙解答一下。
还不知道我的理解对不对哈!
http://kjah.javaeye.com/blog/420624
http://kjah.javaeye.com/blog/422509
是解释range对象的,但是对于selection也是一样的,应该比较好的解释了collapse,和extend的两个参数的作用
FF下document.execCommand就是对你所选中的区域进行操作,chrome也是这样的
lz可以看看这个方法支持性的列表:
http://www.quirksmode.org/dom/execCommand.html
估计lz你的错误是出在 range 上了
不知道 lz 的 range 是不是用的IE特有的 createTextRange 呢?
http://www.quirksmode.org/dom/execCommand/