如果它在< LI>内部,请避免使用createElement函数.元素(contentEditable) [英] Avoid createElement function if it's inside a <LI> element (contentEditable)
问题描述
我正在使用此功能,以便在使用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 }
首先,使用keyup
作为事件名称,keypress仅在Firefox上有效.
第二个,e.并不总是可用.首先使用e.keyCode,然后回退到e.哪个:
var code = e.keyCode || e.which;
if (code == 13) {
// your code here..
}
第三,如果您需要取消按键中触发的默认事件,则可能需要在事件处理程序例程中放入preventDefault().确保它是第一行.
function(e){
e.preventDefault();
..
}
I'm using this function in order to replace <DIV>New Divs</DIV>
with <BR>
in break lines on contentEditable divs using Safari and Chrome:
$("#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;
}
}
});
The problem is that when I'm typing inside an <UL><LI>Something</LI></UL>
and I press the "return" key, I don't want to get a <BR>
, so I can continue whit the list...
How could I create a condition for that function not to work if I'm inside a LI
element?
EDIT WITH MY ANSWER:
Ok, I've managed to do it, but If you have any comment on the code, you're welcome:
$("#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 }
First, use keyup
as the event name, keypress works only on Firefox.
Second, e.which is not always available. Use e.keyCode primarily, and fall back to e.which:
var code = e.keyCode || e.which;
if (code == 13) {
// your code here..
}
Third, if you need to cancel default events fired in the key-press, you might want to throw in a preventDefault() inside your event handler routine. Make sure it's the first line.
function(e){
e.preventDefault();
..
}
这篇关于如果它在< LI>内部,请避免使用createElement函数.元素(contentEditable)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!