Pracuję nad edytorem tekstu w formacie RTF dla przeglądarki internetowej i chcę pracować z wartościami bieżącego koloru czcionki i rozmiaru w elemencie RTE/ContentEditable. Czy jest jakaś wstępnie wybrana funkcja uzyskiwania tych wartości, na przykład execCommand, która jest połączona bezpośrednio z elementem ContentEditable? Czy powinienem użyć biblioteki jQuery z tekstem, która dostanie te właściwości?ContentEditable - Pobierz aktualny kolor czcionki/rozmiar
13
A
Odpowiedz
27
Można użyć document.queryCommandValue()
uzyskać kolor i rozmiar czcionki bieżącej selekcji we wszystkich głównych przeglądarkach:
żywo demo: http://jsfiddle.net/timdown/AJBsY/
Kod:
var colour = document.queryCommandValue("ForeColor");
var fontSize = document.queryCommandValue("FontSize");
Jednak wyniki są niespójne w różnych przeglądarkach, a polecenie FontSize
działa tylko w przypadku rozmiarów czcionek 1-7 używanych w elemencie HTML <font>
, a nie w CSS, więc lepiej byłoby uzyskać element ntaining wybór i badanie ich właściwości CSS za pomocą window.getComputedStyle()
/currentStyle
:
żywo demo: http://jsfiddle.net/timdown/K4n2j/
Kod:
function getComputedStyleProperty(el, propName) {
if (window.getComputedStyle) {
return window.getComputedStyle(el, null)[propName];
} else if (el.currentStyle) {
return el.currentStyle[propName];
}
}
function reportColourAndFontSize() {
var containerEl, sel;
if (window.getSelection) {
sel = window.getSelection();
if (sel.rangeCount) {
containerEl = sel.getRangeAt(0).commonAncestorContainer;
// Make sure we have an element rather than a text node
if (containerEl.nodeType == 3) {
containerEl = containerEl.parentNode;
}
}
} else if ((sel = document.selection) && sel.type != "Control") {
containerEl = sel.createRange().parentElement();
}
if (containerEl) {
var fontSize = getComputedStyleProperty(containerEl, "fontSize");
var colour = getComputedStyleProperty(containerEl, "color");
alert("Colour: " + colour + ", font size: " + fontSize);
}
}
To jest poprawa, ale nadal istnieją rozbieżności przeglądarek takich jak różniące się jednostki lub formaty kolorów.
Powiązane problemy
- 1. Magento - pobierz aktualny produkt
- 2. Pobierz aktualny czas
- 3. Samsung SmartTV pobierz aktualny czas
- 4. Pobierz aktualny język w CultureInfo
- 5. Pobierz aktualny czas w C
- 6. Pobierz aktualny katalog plików wsadowych
- 7. Pobierz kolor tła układu
- 8. Pobierz kolor obrazu
- 9. Pobierz kolor tła okna
- 10. Pobierz bieżący kolor
- 11. Pobierz aktualny czas IST w php
- 12. Pobierz aktualny rozmiar stosu w FORTH
- 13. Pobierz aktualny adres URL w witrynie vb.net
- 14. Pobierz aktualny datownik z konkretnej strefy czasowej
- 15. Pobierz kolor iPhone iOS Sdk
- 16. Jak mogę uzyskać aktualny kolor tła paska bieżącego motywu?
- 17. Szyny - pobierz aktualny adres URL bez parametrów GET.
- 18. Pobierz aktualny czas na iPhone w wybranym formacie
- 19. Pobierz aktualny adres URL strony z rozszerzenia paska bocznego firefox
- 20. pobierz aktualny URL strony (używane ponowne napisanie adresu URL)
- 21. Pobierz wybrany tekst w treściDodatkowe?
- 22. wydarzenie onChange z contentEditable
- 23. div contentEditable ale Readonly
- 24. TinyMCE z contentEditable
- 25. contenteditable i emberjki
- 26. powrócić do contenteditable po execCommand?
- 27. Wybierz zakres w contenteditable div
- 28. Wkładanie mathjax do contenteditable div
- 29. Słuchaj konkretnych zmian w contenteditable?
- 30. Pobierz bieżący URL (UIWebView)
Nie zauważyłem problemów z jednostkami we właściwościach rozmiaru czcionki w nowych wersjach wszystkich przeglądarek i IE7,8. Jednak kolor jest gdzieś zinterpretowany za pomocą rgb i gdzie indziej z notacją szesnastkową. Ale to już nie jest problem dla mnie, prawdopodobnie stworzę dla niego jakiś warunek. Dziękuję Ci! – optimista
Czy jest możliwe uzyskanie "niezdefiniowanego", jeśli zaznaczenie zawiera więcej niż jeden rozmiar czcionki (lub kolor)? Teraz, gdy wybiorę wszystko, ostrzeże "Kolor: rgb (0, 0, 0), rozmiar czcionki: 16 pikseli". To jest mylące dla mojego celu. –
@Timo: Możliwe, że element nadrzędny selekcji nie jest tym, za kogo się uważasz. Gdy wybierzesz wszystkie, prawdopodobnie będzie to element contenteditable, który może nie mieć żadnej stylizacji. –