2011-01-24 23 views
5

Załóżmy, że mam zestaw elementów div contenteditable="true".Zaznacz/wybierz wiele elementów div z zakresami w/contenteditable?

<div id="0" contenteditable="true"></div> 
<div id="1" contenteditable..></div> 
<div...etc></div> 

Nie mogę mieć jeden div, wiele DIV jest koniecznością. Jak mogę podświetlić treść więcej niż jednego elementu div? Używasz zakresów? Coś jeszcze?

+0

@ JC0C611: Liczby nie są poprawnymi wartościami dla "id" według W3C –

+0

To jest dość dziwne, ale powiedzmy, że gdzie "_0", "_1" ... itd., Byłoby to ważne, prawda? – JCOC611

+0

@ JC0C611: token ID i NAZWA musi rozpoczynać się od litery ([A-Za-z]), po której może następować dowolna liczba liter, cyfr ([0-9]), łączników ("-"), podkreślenia ("_"), dwukropki (":") i kropki (".") (http://www.w3.org/TR/html401/types.html#type-name) –

Odpowiedz

6

Odpowiedź jest taka, że ​​zależy to od przeglądarki. Zobacz this example, aby przetestować dwie metody za pomocą zakresów. Pierwsze próby utworzenia zakresu na edytowalną całość i dodanie ich do zaznaczenia. Druga próba utworzenia pojedynczego zakresu obejmuje zawartość dwóch edytowalnych <div>.

Wyniki:

  • we wszystkich przeglądarkach, niemożliwe jest, aby użytkownik mógł utworzyć zaznaczenie, że mieszka w więcej niż jednej edycji elementu;
  • Firefox jest najbardziej permisywnym z głównych przeglądarek. Obydwie metody programistyczne działają.
  • Safari i Chrome są najmniej pobłażliwe: żadna z metod nie wybiera treści z więcej niż jednego edytowalnego elementu.
  • Opera 11 nie obsługuje wielu zakresów w zaznaczeniu, ale obsługuje wybrany zakres obejmujący więcej niż jeden edytowalny element.
  • Wstępna wersja IE 9 nie obsługuje funkcji DOM Range lub tego samego interfejsu API Selection, jak inne przeglądarki, ale odpowiadający jej kod TextRange nie pozwala na wybór z więcej niż jednego edytowalnego elementu.
+0

Wielkie dzięki! Zastanawiam się, czy możliwe byłoby naśladować zakresy przy użyciu div tła i javascript .. – JCOC611

+0

Będę śmiało wybierać tę opcję jako akceptowaną odpowiedź, i utworzyć kolejne pytanie, w jaki sposób naśladować zakresy w/divs i JS. – JCOC611

+0

@ JCOC611: To nie tyle zakres, który będziesz naśladować jako wybór. Tworzenie tylu zakresów, ile chcesz, działa dobrze, więc wybór ich stanowi problem. –

3

Istnieje możliwość przełączenia elementów div na contenteditable="false" w locie w wyniku rozpoczęcia selekcji w jednym z nich. Coś takiego daje pomysł (przy użyciu jQuery):

$('div').bind("selectstart", function() { 
    $('div').attr("contenteditable", false); 
});​ 

Here's a fiddle to demonstrate (tylko przetestowane w Chrome).

Uwaga na przykładzie skrzypiec, że pierwszy Div ContentEditable dostaje fokus. To pozwala na wpisywanie w normalny sposób, ale gdy tylko wybierzesz cokolwiek, używając myszy lub klawiatury, zobaczysz, że możesz normalnie rozszerzać wybór między elementami div.

To oczywiście wymaga dopasowania do pracy z wieloma przeglądarkami i powrotu z powrotem do contenteditable="true". Ale myślę, że podejście jest prawidłowe.

+0

dodaj do tego a onclick -> contenteditable = true i jesteś w połowie drogi (tutaj jestem atm) – Prozi

+0

Pomogło mi ... mam pytanie .. Robię to jako @Prozi, ale nie pokazuje kursora na tę pozycję, którą mogę dodać, ale nie ma tam kursora? jakieś rozwiązanie? demo: http://jsfiddle.net/T7b3r/55/ – Dhara

+0

http://jsfiddle.net/8b403yxy/ – Prozi

Powiązane problemy