2012-01-07 33 views
13

Tôi đang làm việc trên Trình chỉnh sửa văn bản đa dạng cho trình duyệt web và tôi muốn làm việc với các giá trị màu và kích thước phông chữ hiện tại trong phần tử RTE/ContentEditable. Có một số chức năng được chọn trước để nhận các giá trị này, như execCommand, được kết nối trực tiếp với phần tử ContentEditable không? Hoặc tôi nên sử dụng một số thư viện jQuery phạm vi văn bản mà sẽ nhận được các thuộc tính này?ContentEditable - Nhận màu/kích thước phông chữ hiện tại

Trả lời

27

Bạn có thể sử dụng document.queryCommandValue() để có được màu sắc và kích thước phông chữ của vùng chọn hiện tại trong tất cả các trình duyệt chính:

Live Demo: http://jsfiddle.net/timdown/AJBsY/

Code:

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

Tuy nhiên, kết quả là không nhất quán giữa các trình duyệt và lệnh FontSize chỉ hoạt động với các kích thước phông chữ 1-7 được sử dụng trong phần tử HTML <font> thay vì CSS, vì vậy, bạn nên ngừng giữ phần tử ntaining việc lựa chọn và kiểm tra các thuộc tính CSS của nó sử dụng window.getComputedStyle()/currentStyle:

Live Demo: http://jsfiddle.net/timdown/K4n2j/

Code:

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

Đây là một sự cải tiến, nhưng vẫn còn những mâu thuẫn trình duyệt như các đơn vị khác nhau hoặc định dạng màu.

+1

Tôi đã không nhận thấy một số vấn đề với các đơn vị thuộc tính kích thước phông chữ trong các phiên bản mới của tất cả các trình duyệt và IE7,8. Tuy nhiên màu sắc là một nơi nào đó giải thích với rgb và một nơi nào đó với ký hiệu hex. Nhưng đó không phải là vấn đề đối với tôi, có lẽ tôi sẽ tạo ra một số điều kiện cho nó. Cảm ơn bạn! – optimista

+0

Có thể nhận được "không xác định" nếu lựa chọn có chứa nhiều cỡ chữ (hoặc màu) không? Bây giờ khi tôi chọn tất cả, nó cảnh báo "Màu: rgb (0, 0, 0), cỡ chữ: 16px". Điều này là khó hiểu cho mục đích của tôi. –

+0

@Timo: Có thể phần tử mẹ của lựa chọn không phải là phần bạn nghĩ. Khi bạn chọn tất cả, có khả năng là phần tử có thể chỉnh sửa được, có thể không có kiểu dáng nào. –

Các vấn đề liên quan