2010-03-29 29 views
10

Trên trang tôi có, tôi cần di chuyển các trình chỉnh sửa TinyMCE trong cây DOM một lần trong một thời gian. Tuy nhiên, vì một lý do nào đó, trình soạn thảo không thích nó: nó tự xóa hoàn toàn và trở nên không sử dụng được. Theo như tôi thấy, hành vi này là nhất quán giữa Safari 4 và Firefox 3.6, nhưng không phải là Internet Explorer 7/8. Here's an example.Trình chỉnh sửa TinyMCE không thích được di chuyển xung quanh

Nó thực sự là pissing tôi ra để làm một cái gì đó mà làm việc trong Internet Explorer nhưng không phải với các trình duyệt đáng giá hơn. Có một cái gì đó tôi bị mất trong các tài liệu về không bao giờ cố gắng để di chuyển một trình soạn thảo trong cây DOM? Có cách giải quyết nào không?

+0

Có thể nào tất cả các trình xử lý sự kiện đều bị ràng buộc với các phần tử khi nó được di chuyển? – alex

+0

@alex: Không chắc chắn. Trình lắng nghe sự kiện trên các phần tử được duy trì ngay cả khi chúng không bắt nguồn từ tài liệu. – zneak

+0

Vâng, bạn nói đúng. Tôi chỉ nhớ bạn đã mất chúng khi sử dụng 'innerHTML'. Nhưng tôi vừa kiểm tra nguồn của bạn và bạn đang sử dụng các phương thức DOM thích hợp. CKeditor có làm điều tương tự không? – alex

Trả lời

7

Đây là lỗi/vấn đề trình duyệt không phải là vấn đề với TinyMCE. Nó không thể giữ lại nội dung iframe trong một số trình duyệt kể từ khi bạn loại bỏ các nút từ dom các tài liệu/cửa sổ unloads. Tôi đề nghị đầu tiên loại bỏ trình soạn thảo, sau đó thêm lại nó thay vì di chuyển nó trong DOM.

+0

Đó là những gì tôi đã làm ban đầu, nhưng tôi đã có vấn đề với 'document_base_url' messing lên hình ảnh của tôi trên lưu. Đó là thực sự không liên quan và tôi đã sửa nó (với 'convert_urls' thành' false'). Nhưng ồ, nó hoạt động, và bạn xứng đáng có một số đại diện. – zneak

+0

Không thể có câu trả lời tốt hơn so với một từ nhà phát triển chính của TinyMCE! +1 – alex

8

Đã cùng một vấn đề và đây là cách tôi giải quyết nó ...

Tạo vấn đề

tôi sử dụng jquery để di chuyển các yếu tố dom có ​​chứa trình biên tập TinyMCE mà làm cho nó mất tất cả đó là nội dung:

$('.form-group:last').after($('.form-group:first')) 

Sau thời điểm này, nội dung khung nội tuyến của trình soạn thảo bị xóa.

Giải pháp

var textareaId = 'id_of_textarea'; 
tinyMCE.get(textareaId).remove(); 
tinyMCE.execCommand("mceAddEditor", false, textareaId); 

Có những lần khi biên tập sẽ thêm iframe trở lại, nhưng không được hiển thị. Nếu đúng như vậy, hãy bỏ ẩn vùng chứa:

$textarea = $('#' + textareaId) 
$textarea.closest('.mce-tinymce.mce-container').show() 

Lưu ý, đây là cách sử dụng tinymce 4.x.

+1

Cảm ơn, điều đó cũng phù hợp với tôi. – lucaswxp

+1

cảm ơn các hướng dẫn rõ ràng! – srvy

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