Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止IE中的空行在contenteditable=false时折叠_Javascript_Jquery_Contenteditable_Rte - Fatal编程技术网

Javascript 防止IE中的空行在contenteditable=false时折叠

Javascript 防止IE中的空行在contenteditable=false时折叠,javascript,jquery,contenteditable,rte,Javascript,Jquery,Contenteditable,Rte,我有一个设置了contenteditable=true的div,以便允许内联编辑(用于RTE目的) 我知道不同的浏览器处理回车键的方式不同,FF inserts和IE inserts 我遇到的问题是在不同的行中输入文本 e、 g案文如下: line 1 line 2 line 3 line 4 在FF中,当输入上述内容,然后切换contenteditable=false时,行格式仍保持预期 但是,如果在IE中编辑多行文本,然后设置contenteditable=false,则所有空行都会

我有一个设置了
contenteditable=true
的div,以便允许内联编辑(用于RTE目的)

我知道不同的浏览器处理回车键的方式不同,FF inserts

和IE inserts

我遇到的问题是在不同的行中输入文本

e、 g案文如下:

line 1
line 2

line 3


line 4
在FF中,当输入上述内容,然后切换
contenteditable=false
时,行格式仍保持预期

但是,如果在IE中编辑多行文本,然后设置
contenteditable=false
,则所有空行都会折叠。e、 g:

line 1
line 2   
line 3    
line 4
如果我随后重置
contenteditable=true
,这些折叠的行将被恢复


我猜这与IE使用
有关,你知道我如何防止当
contenteditable=false
时行被折叠吗?

你可以尝试通过点击回车来绕过IE行为,并添加
BR
而不是

pad.addEventListener('keydown',keyDown,false);

function keyDown(e){
    if(e.keyCode!=13) return;
    pad.innerHTML+='<br />\b';
    e.stopPropagation();
    e.preventDefault();
    return false;
}

<div id="pad" contenteditable="true"></div>
在regexp中,您需要一个文本退格字符,
/\b/
不起作用。要实际查看退格字符,您可以在Opera中使用此
键运行代码()
,编写一些字母,然后在
键盘中按ENTER键,然后将字符复制粘贴到代码中

注意,这段代码应该只在IE中运行,其他浏览器会弄乱换行符



我不知道为什么会这样。IE似乎在

之后添加了一些非打印字符,按ENTER键后必须删除这些字符才能创建即时换行。

这确实有效,但阻止了IE在换行内容周围添加标记的本机行为,从而停止使用execcommand的块命令逐行工作(即,居中文本将使所有文本居中,而不是当前行)。似乎在添加contenteditable=true的新行时,即插入

,但当切换到contenteditable=false时,它会修剪这些空的标记,折叠该部分。我编写了一个例程,手动将它们添加回空的标记中,以维护新行
padsInnerHTML=pad.innerHTML.replace(/LITERAL_BACKSPACE_CHARACTER/g,'');