Mam dziwny przypadek dla elementów contenteditable
w HTML. Mamy edytor tekstu sformatowanego, w którym klienci ładują gotowe szablony (przez nas), a następnie mogą modyfikować ten szablon, ale chcą (najczęściej).Newlines i contenteditable z zagnieżdżonymi, nieedytowalnymi tagami
Część naszych szablonów została oznaczona jako nie do bezpośredniego edytowania, ale nadal można je usunąć itp. Jednak wydaje się, że występuje problem, gdy jeden taki element jest pierwszym elementem w linii (bezpośrednio po tagu <br/>
), a użytkownik trafia na DEL
w powyższej linii. Ponieważ jest to contenteditable=false
, wydaje się, że przeglądarka nie usuwa <br/>
, ale całego zakresu nieedytowalnego.
Przykładowy HTML jest jak ten
<div contenteditable=true>
<span>blah blah blah</span><br/>
<span contenteditable="false">You cant edit this value directly</span>
</div>
Jeśli użytkownik stawia ich kursor po blah blah blah
i uderza DEL
cały następny zawartość edycji zostanie usunięty, zamiast przerwy linii.
Czy jest jakiś sposób, javascript lub w inny sposób, aby naprawić to zachowanie?
Ive oszukał, próbując wykryć pozycję kursora (używając rangy) i wstawiając tymczasowe spacje, itp., Ale nie wydaje mi się, aby uzyskać pożądane zachowanie, które jest po prostu nieczytelnym tagiem do poprzedniej linii.
Ograniczono korzystanie z edytora tylko w Chrome, więc nie musisz się martwić o IE lub FF.
Czy '
' jest częścią twojego szablonu? Jeśli tak, to nie możesz użyć 3 'div's zamiast używać'
'? –
Tak. Z powodów, które nie są do końca pewne (prawdopodobnie do renderowania), zastąpiliśmy klawisz Enter, aby wstawić podział wiersza, zamiast pozwolić przeglądarce wstawić, w tym przypadku divs. –
Innym rozwiązaniem może być przejęcie pełnej kontroli nad zdarzeniami kluczowymi usuwania. W razie potrzeby można użyć odziedziczonej funkcji i zablokować zdarzenie, gdy nie jest to pożądane. Lub nawet użyj 100% niestandardowej logiki usuwania. * Edycja: * Dopuszczenie zdobycia pozycji opiekuna może być trochę trudne, ale na pewno jest możliwe. –