我正在尝试处理iframe中的contenteditable正文,以防止在按Enter键时浏览器自行添加
以下是我的代码(使用JQuery),只有带“magic Alerts”的代码才能完美运行:
```SEEREF``` = framewindow.document.body.innerHTML(它太长了)
编辑:当我移除Magic Alerts后,在Chrome中仍然有效,但在Firefox中它会聚焦于所有内容的开头!(就像偏移量为0一样)
更新:
看起来问题出在将换行符替换为 ```br``` 标签的那一行代码上。如果我删除这行代码,即使没有警报,它也可以完美地工作。我需要保留这些 ```br``` 标签,有没有其他方法可以做到这一点?
br
、p
或div
。但是,在尝试重置焦点时会出现奇怪的情况,只有在处理其余代码之前进行alert()时才能正常工作。我认为这是因为JavaScript需要一些时间来进行操作,但必须有一种方法可以在不“休眠”脚本的情况下完成它...以下是我的代码(使用JQuery),只有带“magic Alerts”的代码才能完美运行:
//PREVENT DEFAULT STUFF
var iframewindow=document.getElementById('rte').contentWindow;
var input = iframewindow.document.body;
$( input ).keypress( function ( e ) {
var sel, node, offset, text, textBefore, textAfter, range;
// the Selection object
sel = iframewindow.getSelection();
alert(sel); //MAGIC ALERT
// the node that contains the caret
node = sel.anchorNode;
alert(node); //MAGIC ALERT
// if ENTER was pressed while the caret was inside the input field
if ( node.parentNode === input && e.keyCode === 13 ) {
// prevent the browsers from inserting <div>, <p>, or <br> on their own
e.preventDefault();
// the caret position inside the node
offset = sel.anchorOffset;
// insert a '\n' character at that position
text = node.textContent;
textBefore = text.slice( 0, offset );
textAfter = text.slice( offset ) || ' ';
node.textContent = textBefore + '\n' + textAfter;
SEEREF=SEEREF.replace(/\n/g, "<br>");
// position the caret after that newBR character
range = iframewindow.document.createRange();
range.setStart( node, offset + 4 );
range.setEnd( node, offset + 4 );
// update the selection
sel.removeAllRanges();
sel.addRange( range );
}
});
```SEEREF``` = framewindow.document.body.innerHTML(它太长了)
编辑:当我移除Magic Alerts后,在Chrome中仍然有效,但在Firefox中它会聚焦于所有内容的开头!(就像偏移量为0一样)
更新:
看起来问题出在将换行符替换为 ```br``` 标签的那一行代码上。如果我删除这行代码,即使没有警报,它也可以完美地工作。我需要保留这些 ```br``` 标签,有没有其他方法可以做到这一点?
console.log
做的是同样的事情吗? - Alexandre Khouryalert
语句给代码执行时间。 - Alexandre Khoury