2011-12-29 39 views
6

Tôi đã tạo một plugin cho tinyMCE để chèn vào các công thức toán học trình soạn thảo bằng MathJax. Plugin này mở cửa sổ bật lên trong khung nội tuyến (sử dụng jQuery) và sau đó khởi chạy một sự kiện kích hoạt để chèn công thức đã nhập vào trình chỉnh sửa hoạt động tinyMCE.tinymce.selection.setContent chèn văn bản vào đầu của vùng văn bản trong IE

Mã của tôi hoạt động bình thường trong Chrome & Firefox (tạo một pre được chèn vào vị trí dấu của văn bản) nhưng trong IE văn bản được chèn ở đầu văn bản.

Tôi đang sử dụng phương pháp setContent như thế này:

tinyMCE.activeEditor.selection.setContent(text to insert, {format: 'bbcode'}); 

Tôi cố gắng để sử dụng ed.focus() trước khi chèn và kiến ​​nghị khác được tìm thấy trong StackOverflow nhưng không làm việc cho tôi.

Ngoài ra, tôi đã cố gắng lưu vị trí dấu mũ trước khi mở cửa sổ bật lên và khôi phục vị trí đó khi chèn nhưng không hoạt động.

Bất kỳ ý tưởng nào?

Xin cảm ơn trước.

Trả lời

6

SOLVED:

Tôi biết rằng nó không phải là giải pháp thanh lịch nhất nhưng làm việc cho tôi.

Trước khi mở cửa sổ bật lên tôi chèn một "nhịp cầu" với và ID cụ thể như thế này:

var sel = tinyMCE.activeEditor.selection; 
sel.setContent('<span id="_math_marker">&nbsp;</span>'); 

Sau đó, khi đóng cửa sổ popup và văn bản được gửi trả lại cho trình biên tập, tôi tìm kiếm nhịp với điểm đánh dấu sau đó tôi chọn nó và gọi setContent:

var ed = tinyMCE.activeEditor; 
var marker = ed.dom.get('_math_marker'); 
ed.selection.select(marker, false); 
ed.selection.setContent("TEXT TO INSERT"); 

Làm việc này cho tất cả các trình duyệt! Hãy nhớ xóa khoảng thời gian nếu cửa sổ bật lên được đóng mà không chèn bất kỳ thứ gì để tránh để rác trong trình chỉnh sửa.

:-)

0

Hãy thử một cái gì đó như thế này:

 

var myField = tinyMCE.get("SMSBody"); 

    //IE support 
    if (document.selection) { 

     myField.focus(); 
     sel = document.selection.createRange(); 
     sel.text = fieldName; 
    } 
else if (document.getSelection) { 

     tinyMCE.activeEditor.selection.setContent(fieldName); 
     myField.focus(); 
    } 
 

Hy vọng nó sẽ làm việc cho bạn.

+0

Không hoạt động: (Bây giờ tôi đang cố lưu vị trí trước khi mở cửa sổ bật lên. Tôi sẽ cập nhật ngay khi có thể đặt được. Cảm ơn :) – vfportero

0

Xin chào, tôi đã sử dụng một trong các plugin jQuery được gọi là jCaret cho các loại tình huống này. Hoạt động hoàn hảo ở hầu hết các trình duyệt thường được sử dụng (IE 7,8,9 với chế độ tương thích).

Hãy nhìn vào các ví dụ được đưa ra trong các liên kết dưới đây

jCaret

Cảm ơn

+0

Tôi sẽ xem xét lời khuyên của bạn. Cảm ơn! – vfportero

1

Chỉ cần xóa.lựa chọn một phần, do đó, mã của bạn sẽ trông như thế

tinyMCE.activeEditor.setContent(text to insert, {format: 'bbcode'});

1

Trong IE8 trong cant nhận biên tập tích cực, vì vậy cần phải tập trung, vì vậy sử dụng

tinyMCE.activeEditor.focus();

Hy vọng nó phù hợp với bạn.

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