2012-01-07 17 views
13

Web tarayıcısı için Rich Text Editor üzerinde çalışıyorum ve RTE/ContentEditable öğesinde geçerli yazı tipi rengi ve büyüklüğü ile çalışmak istiyorum. ContentEditable öğeyle doğrudan bağlantılı olan execCommand gibi bu değerleri almak için önceden seçilmiş bir işlev var mı? Veya bu özellikleri alacak bir metin aralığı jQuery kitaplığı kullanmalı mıyım?ContentEditable - Geçerli font rengini/boyutunu göster

cevap

27

Sen tüm büyük tarayıcılarda geçerli seçimin rengi ve yazı tipi boyutunu almak için document.queryCommandValue() kullanabilirsiniz:

Canlı tanıtım: http://jsfiddle.net/timdown/AJBsY/

Kodu:

var colour = document.queryCommandValue("ForeColor"); 
var fontSize = document.queryCommandValue("FontSize"); 

Ancak sonuçlarıdır tarayıcılar arasında tutarsız ve FontSize komutu, yalnızca CSS yerine HTML <font> öğesinde kullanılan 1-7 yazı tipi boyutları ile çalışır; seçim ntaining ve kullanarak CSS özelliklerini window.getComputedStyle()/currentStyle incelenmesi:

Canlı tanıtım: http://jsfiddle.net/timdown/K4n2j/

Kodu:

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); 
    } 
} 

Bu bir gelişmedir, ancak bu tür birimleri farklı olarak tarayıcı tutarsızlıklar hala var ya renk formatları.

+1

Yazı tipi boyutu özelliklerinde, tüm tarayıcıların ve IE7,8'in yeni sürümlerinde bazı sorunlar görmedim. Bununla birlikte, renk rgb ile ve hex gösterimiyle bir yerde yorumlanmış bir yerdedir. Ama bu benim için bir sorun değil, muhtemelen bunun için bir koşul yaratacağım. Teşekkür ederim! – optimista

+0

Seçim birden fazla yazı tipi boyutu (veya rengi) içeriyorsa "tanımsız" almak mümkün mü? Şimdi hepsini seçtiğimde, "Renk: rgb (0, 0, 0), yazı tipi boyutu: 16px" uyarır. Bu benim amacım için kafa karıştırıcı. –

+0

@Timo: Seçimin ana öğesi, düşündüğünüz gibi değil. Hepsini seçtiğinizde, herhangi bir stil içermeyen, tartışmalı öğe olması muhtemeldir. –

İlgili konular