我正在使用此功能,以便使用Safari和Chrome在contentEditable div的替换行中将<DIV>New Divs</DIV>
替换为<BR>
:
$("#form_description").live("keypress", function(e){
if (e.which == 13) {
if (window.getSelection) {
var selection = window.getSelection(),
range = selection.getRangeAt(0),
br = document.createElement("br");
range.deleteContents();
range.insertNode(br);
range.setStartAfter(br);
range.setEndAfter(br);
range.collapse(false);
selection.removeAllRanges();
selection.addRange(range);
return false;
}
}
});
问题是,当我在<UL><LI>Something</LI></UL>
内输入并按“返回”键时,我不想获得<BR>
,因此我可以继续使用该列表。 ..
如果我在LI
元素中,我怎么能创建一个不起作用的条件?
用我的答案编辑:
好的,我已经设法做到了,但如果您对代码有任何评论,欢迎您:
$("#form_description").live("keypress", function(e){
if (e.which == 13) {
node = document.getSelection().anchorNode;
nodeName = node.parentNode.nodeName.toLowerCase();
if ((nodeName != "li") && (nodeName != "blockquote")) {
... etc }
答案 0 :(得分:1)
首先,使用keyup
作为事件名称,keypress仅适用于Firefox。
其次,e。这并不总是可用的。主要使用e.keyCode,然后回到e.which:
var code = e.keyCode || e.which;
if (code == 13) {
// your code here..
}
第三,如果您需要取消在按键中触发的默认事件,您可能希望在事件处理程序例程中引入preventDefault()。确保它是第一行。
function(e){
e.preventDefault();
..
}