Я нашел решение :) Чтобы заставить это работать, вы должны дать идентификатор родительскому элементу каретки.Тогда вы можете использовать следующий код.Обратите внимание, что я получаю browsernName из c # и помещаю его в скрытое поле.Вот почему я сравнил его с «Firefox».Следующий код протестирован с FF 3.6 и работает отлично.Единственное, что вам нужно проверить родительский элемент каретки, и если он не равен идентификатору текущей строки, вам нужно будет поместить каретку внутри текущей строки с помощью функции выбора.Кроме того, выполните этот код для события keyup и убедитесь, что если вы выполняете некоторые другие коды для события keyup, поместите этот код в конец!Anways, наслаждайся:)
// The code works good in the following cases:
// 1) If there is text inside the editor and the user selects the whole text
// and replace it with a single character, the <p> tag will be placed and the
// text will place inside the p tag
// 2) If the user selects the whole code and deletes it and begins to type again
// 3) If the user types normally and press enter
// NB: Please note me if you find any bug
if (browserName == "firefox") {
//remove all br tags
var brs = txteditor.getElementsByTagName("br");
for (var i = 0; i < brs.length; i++) { brs[i].parentNode.removeChild(brs[i]); }
//check whether there is a p tag inside
var para = txteditor.getElementsByTagName("p");
if (para.length == 0) {
var inner = txteditor.innerHTML.replace(/^\s+|\s+$/g, '');
var str = (inner == "") ? "​" : txteditor.innerHTML;
var nText = "<p id=\"" + cRow + "\">" + str + "</p>";
// in order to prevent a dublicate row clear inside the text editor
txteditor.innerHTML = "";
document.execCommand('insertHTML', false, nText);
} else {
// always make sure that the current row's innerHTML is never empty
if (document.getElementById(cRow).innerHTML == "")
document.getElementById(cRow).innerHTML = "​";
}
}