我正在制作一個(gè)編輯器,我有一個(gè) DOM 結(jié)構(gòu),比如<div id="container" contenteditable=true> <div id="one">Some fancy text</div> <div id="two">Some other text</div> <div id="three">and that's enough!</div></div>在此編輯器中,寫入的文本位于 div 'container' 內(nèi),該 div 是一個(gè)內(nèi)容可編輯的 div,然后分成幾個(gè)內(nèi)部 div,隨著用戶寫入而變化。在我的結(jié)構(gòu)中,以編程方式,在網(wǎng)頁(yè)生命周期中,在“容器”中添加、刪除和移動(dòng)了許多 div,甚至更改了 id。我不需要在主 div(帶有數(shù)字 id 的那些)內(nèi)有額外的 div 塊,所以我強(qiáng)制以編程方式在按下返回時(shí)添加一個(gè) br,而不是像 firefox 那樣在 div 中包裝文本。由于 Firefox 中的問(wèn)題,插入符號(hào)(光標(biāo))的行為非常奇怪,我無(wú)法解決該問(wèn)題。問(wèn)題似乎是眾所周知的。Firefox 解決了在按下返回鍵時(shí)在文本周圍放置額外 div 的問(wèn)題。在我的情況下,避免這種情況,當(dāng)您第一次在最后一個(gè) div 的末尾按回車時(shí),插入符號(hào)正確移動(dòng)(如果您繼續(xù)書寫,它會(huì)在新行的正確位置寫入),但顯示在一個(gè)奇怪的位置,就像在上一行的開頭一樣。這只發(fā)生在最后一個(gè) div 的最后。它也顯示在此處,但建議的解決方案對(duì)我不起作用Firefox 設(shè)置了錯(cuò)誤的插入符號(hào)位置 contentEditable 與 :before在這里你可以看到問(wèn)題本身:window.addEventListener('keydown', function (event) { if(event.keyCode === 13){ event.preventDefault(); // Ensure it is only this code that runs console.log("+++ Pressed return and adding a br!"); addHtmlElementAtCursor('br'); return false; }});function keyPress(event) { }function addHtmlElementAtCursor(element) { var sel, range, textNode; if (window.getSelection) { sel = window.getSelection(); if (sel.getRangeAt && sel.rangeCount) { range = sel.getRangeAt(0); range.deleteContents(); if (element==' ') { textNode = document.createTextNode('\u00A0'); }else{ textNode = document.createElement(element); } range.insertNode(textNode); // Move caret to the end of the newly inserted text node range.setStartAfter(textNode, textNode.length); range.setEndAfter(textNode, textNode.length); sel.removeAllRanges(); sel.addRange(range); } } else if (document.selection && document.selection.createRange) { range = document.selection.createRange(); range.pasteHTML(text); }
Firefox 在錯(cuò)誤的位置顯示插入符號(hào)?
阿波羅的戰(zhàn)車
2021-11-12 18:30:54