Ich suche seit über einer Woche bei Google, habe versucht, verschiedene Lösungen zu implementieren, aber ohne Erfolg, und es nervt von mir.contenteditable - Auswählen von zwei untergeordneten Absätzen und Schreiben von Text über (Firefox Issue)
Sie haben also ein contenteditable div mit mehreren Absätzen (oder andere untergeordnete Elemente der gleichen Art). Offensichtlich ist dies die Art von Layout, die du behalten willst. Wenn der Benutzer zwei oder mehr Absätze und Typen Text darüber, entfernt es die Absätze und setzt den Einfügemarke Fokus innerhalb des übergeordneten div:
body {
font-family: georgia;
}
.editable {
color: red;
}
.editable p {
color: #333;
}
.editable span {
color: limegreen !important;
}
<div class="editable" contenteditable><p>paragraph one</p><p>paragraph two</p></div>
<hr>
<p>How to reproduce the bug:</p>
<ul>
<li>Focus the contenteditable above by placing the cursor somewhere in one of the two paragraphs.</li>
<li>press ctrl-a (in windows or linux) or cmd-a (in osx) to select-all</li>
<li>type some text</li>
<li>red text means that the text went directly inside the contenteditable div, black text means it went inside a paragraph</li>
</ul>
<p>The correct behaviour should be that that select-all and delete (or "type-over") in a contenteditable with only block tags should leave the cursor inside the first block tag.</p>
<p>Webkit gets this right, Firefox gets it wrong.</p>
Ich habe so etwas wie dies in JQuery versuchen:
$(document).on('blur keyup','div[contenteditable="true"]',function(event){
var sel = window.getSelection();
var activeElement = sel.anchorNode.parentNode;
var tagName = activeElement.tagName.toLowerCase();
if (!(tagName == "p" || tagName == "span")) {
console.log('not on editable area');
event.preventDefault();
//remove window selection
var doselect = window.getSelection();
doselect.removeAllRanges();
}
});
So nach Unschärfe oder keyup Ereignis auf contenteditable, festzustellen, wo die Position caret und wenn es draußen akzeptiert editierbare Bereiche der Veranstaltung oder etwas stoppen?
Ich habe versucht, den Auswahlbereich zu ändern, und eine Menge anderer Sachen, aber vielleicht sehe ich es einfach nicht. Ich bin mir sicher, dass viele Leute das gleiche Problem hatten, aber die einzigen Antworten, die ich bei Google oder hier gefunden habe, sind "editierbare Inhalte", "warum verwendest du nicht einfach einen Open-Source-Editor" und solche Sachen.
Firefox seltsames Verhalten: Einfügen von BR-Tags auf Bruchlinie Ich habe auch versucht Firefox'es seltsames Verhalten mit einer Funktion entfernen Sie all <BR>
Tags firefox fügt automatisch zu entfernen. Wie folgt aus:
function removeBr(txteditor) {
var brs = txteditor.getElementsByTagName("br");
for (var i = 0; i < brs.length; i++) { brs[i].parentNode.removeChild(brs[i]); }
}
So brachte ich dies zu einem keydown
Ereignis, und es tut genau das, was es erwartet wird, aber dass mehr seltsame Verhalten verursacht (wie verhindern Sie Plätze auf ausgewählten Absatz hinzufügen).
Bitte stimmen Sie die Frage ab, damit wir mehr Bewusstsein schaffen können.
Ich bin mir sicher, dass viele andere Leute das gleiche Problem angetroffen haben, ich denke es wäre gut zu wissen, ob es einen Workaround oder einen "richtigen" Weg gibt. Ich denke, es sollte wirklich diskutiert werden ...
Es gibt keinen Standard, so dass es unfair Firefox Verhalten "falsch" zu nennen. –