Php html sang rtf

';
h=k;
for(var j=0;j<4;j++){
if(this.emoticons[(h+j)]){
s+='';';';
}
else{
s+='';
}
k++;
}
s+='';
}
s+='

MIME viết tắt của "Tiện ích mở rộng thư điện tử đa năng" là một Internet tiêu chuẩn về định dạng cho thư điện tử, hầu hết như mọi thư điện tử Internet được truyền qua giao thức SMTP theo định dạng MIME

Type/sub-typeExtensionapplication/envoyevyapplication/fractalsfifapplication/futuresplashsplapplication/htahtaapplication/internet-property-streamacxapplication/mac-binhex40hqxapplication/msworddocapplication/msworddotapplication/octet-streamFile chứa nhị phân ứng dụng/octet-streambinapplication/octet-streamclassapplication/ . ms-excelxlaapplication/vnd. ms-excelxlcapplication/vnd. ms-excelxlmapplication/vnd. ứng dụng ms-excel xlsx/vnd. ms-excelxltapplication/vnd. ms-excelxlwapplication/vnd. ms-outlookmsgapplication/vnd.
payment-initiationsetpayapplication/set-
registration-initiationsetregapplication/vnd. ms-excelxlaapplication/vnd. ms-excelxlcapplication/vnd. ms-excelxlmapplication/vnd. ứng dụng ms-excel xlsx/vnd. ms-excelxltapplication/vnd. ms-excelxlwapplication/vnd. ms-outlookmsgapplication/vnd.
ms-pkicertstoresstapplication/vnd. ms-pkiseccatcatapplication/vnd. ms-pkistlstlapplication/vnd. ms-powerpointpotapplication/vnd. ms-powerpointppsapplication/vnd. ms-powerpointpptapplication/vnd. ms-projectmppapplication/vnd. ms-workswcmapplication/vnd. ms-workswdbapplication/vnd. ms-workswksapplication/vnd. ms-workswpsapplication/vnd.
openxmlformats-officedocument.
bản trình bàyml. ứng dụng pptx thuyết trình/vnd.
openxmlformats-officedocument.
bảng tínhml. sheetxlsxapplication/vnd.
openxmlformats-officedocument.
xử lý văn bảnml. documentdocxapplication/winhlphlpapplication/x-bcpiobcpioapplication/x-cdfcdfapplication/x-compresszapplication/x-compressedtgzapplication/x-cpiocpioapplication/x-cshcshapplication/x-directordcrapplication/x-directordirapplication/x-directordxrapplication/x-dvidviapplication/x-gtargtarapplication/x- . ms-pkipkopkoapplication/zipzipaudio/basicauaudio/basicsndaudio/midmidaudio/midrmiaudio/mpegmp3audio/x-aiffaifaudio/x-aiffaifcaudio/x-aiffaiffaudio/x-mpegurlm3uaudio/x-pn-realaudioraaudio/x-pn-realaudioramaudio/x-wavwavimage/bmpbmpimage/

thần thánh

28-12-2007, 17. 09

Đã có khá nhiều trình soạn thảo văn bản WYSIWYG miễn phí được chia sẻ trên mạng, nhưng nếu bạn là một nhà phát triển web với mục đích thực thi, có thể một lúc nào đó bạn sẽ muốn xây dựng cho riêng mình một Rich Text Editor. Nếu vậy, bài viết này chắc chắn sẽ mang lại cho bạn một chút gì đó hữu ích.

T tiên, khi nảy ra ý muốn viết 1 cái RTE, tôi đã nghĩ đến việc sử dụng 1 thẻ DIV để làm khung soạn thảo. Không khó khăn trong việc khởi tạo con trỏ nhấp nháy và chuyển các ký tự từ bàn phím trong phần tử DIV này. Một ví dụ là chương trình mô phỏng giao diện dòng lệnh của Window mà tôi đặt tên là Web Command Line (http. // sacroroyant. đại học. cc/Ví dụ/cmd/cmd. htm) (nó chỉ để chơi thôi chứ không giải quyết công việc gì. cười nhạo. ).

Nhưng rồi sau nhiều cuộc tìm kiếm, tôi đã phát hiện ra 1 điều quan trọng khác giúp cho công việc đơn giản hóa đi rất nhiều, đó là. Chế độ thiết kế.

DesignMode là 1 thuộc tính của tài liệu đối tượng, giá trị mặc định của nó là "tắt". Khi bạn sửa đổi giá trị này thành "bật", hồ sơ web trở thành dạng có thể chỉnh sửa - editable, và bạn có thể thao tác với trang web trong cửa sổ như đang làm việc trên MS Word. Đây chính là bí quyết để xây dựng RTE cho các trình duyệt web.

Hiện tại chúng ta sẽ làm 1 trình soạn thảo WYSIWYG đơn giản, bao gồm một trường nhập văn bản, và các nút lệnh cho phép định dạng văn bản in đậm - B, in nghiêng - I, gạch . Ngoài ra, chúng tôi cũng thêm vào 2 nút cho phép chèn hình ảnh và liên kết. Sau cùng là một nút để loại bỏ các định dạng. Giao diện của trình soạn thảo trông sẽ như thế này.

http. //trang trại3. tĩnh. flickr. com/2278/2142569192_1e4f841419_o. jpg

Khung soạn thảo là 1 iframe, như cách sử dụng thông thường của các RTE. Chúng ta cho nó 1 ID và sử dụng CSS để thiết lập kích thước và khả năng cuộn.






To biến vùng iframe này về dạng có thể chỉnh sửa, chúng ta thiết lập giá trị của thuộc tính designMode to on by script after.




var editor = document. getElementById('textArea'). nội dungWindow. tài liệu;
trình soạn thảo. designMode='On';
trình chỉnh sửa. open();
trình soạn thảo. write('');');');
trình soạn thảo. close();


Đoạn mã JavaScript này phải được gọi sau khi khung nội tuyến xuất hiện trong trang web.

contentWindow là 1 thuộc tính của các khung, iframe trong hồ sơ HTML.

tài liệu. getElementById('textArea'). contentWindow cho phép tham chiếu đến iframe đối tượng mà danh sách được thiết lập. ID = "textArea".

Trong Mozilla , chúng ta có thể tham chiếu đến 1 đối tượng cửa sổ iframe bằng tập lệnh.


cửa sổ. frames["myFrame"]

Script tương ứng với IE là.

tài liệu. tất cả các. myframe. contentWindow

Vẫn tập lệnh mà chúng tôi sử dụng sẽ thích hợp cho cả IE, Mozilla và Opera.

Như vậy, chúng ta có 1 biến trình soạn thảo toàn cục, để tham chiếu đến tài liệu đối tượng của phần tử iframe giả lập khung soạn thảo văn bản. Dòng lệnh tiếp theo thiết lập designMode of it to "on". Các lệnh open, write, close chèn vào iframe các thẻ cơ bản của 1 hồ sơ HTML, những gì nằm giữa sẽ hiển thị trên các khung soạn thảo như phần văn bản mặc định của Editor. sẽ hiển thị trên các khung soạn thảo như phần văn bản mặc định của Editor. sẽ hiển thị trên các khung soạn thảo như phần văn bản mặc định của Editor.

Sau khi thiết lập designMode = "on", đối tượng tài liệu của iframe sẽ tự động kích hoạt một số phương thức hỗ trợ thực hiện định dạng phần văn bản được chọn (văn bản đã chọn) bên trong nó. Chúng bao gồm.


queryCommandEnabled
queryCommandIndeterm
queryCommandState
queryCommandSupported
queryCommandValue .


Trong đó, quan trọng hơn cả là 2 phương thức execCommand và queryCommandEnabled.

Syntax of execCommand as after.



editableDocument. execCommand(sCommand [, bUserInterface] [, vValue])


Nếu không có văn bản nào được chọn, phương thức này không làm được gì cả.

Tham số bắt buộc sCommand là 1 chuỗi tên lệnh định dạng (mã định danh lệnh), giả định là "bold", "italic". QuirksMode (http. // http. //www. Chế độ quirks. org/) liệt kê khá chi tiết các định dạng lệnh này, và cả cách chúng thực hiện công việc trong từng trình duyệt.

http. //www. Chế độ quirks. org/dom/execCommand. html

Tham số thứ hai, bUserInterface, thuộc dạng tùy chọn và mang 1 giá trị boolean (mặc định. sai). Trong Mozilla, if set is true, you could get 1 error (NS_ERROR_NOT_IMPLEMENTED).

Tham số thứ 3, vValue, cũng thuộc dạng tùy chọn. Bạn sẽ phải sử dụng nó trong một số trường hợp mà tham số đầu tiên cần 1 giá trị cụ thể. Không giới hạn khi muốn định dạng chữ màu, tham số thứ nhất sẽ là "forecolor", và chúng ta cần tham số thứ 3 để trình duyệt biết màu gì sẽ được sử dụng. Ví dụ.


editableDocument. execCommand("forecolor", false, "#0000ff");

Hoặc khi chèn 1 hình ảnh, tham số thứ nhất sẽ là "insertimage", và tham số thứ 3 cho biết đường dẫn của .


editableDocument. execCommand('insertimage', false, imageURL);

Để biết 1 lệnh có thể thực thi hay không, chúng ta sử dụng queryCommandEnabled. Phương thức này nhận 1 tham số là tên của lệnh (như. "đậm", "nghiêng", "forecolor", "chèn ảnh". ), và trả về 1 giá trị boolean cho biết khả năng thi hành lệnh đó. Thông thường chúng ta kiểm tra lệnh trước khi gọi nó. Script dưới đây kiểm tra lệnh tạo liên kết, nếu có thể thực hiện được thì sẽ chèn vào khung soạn thảo 1 HyperLink (aLink).



if(editableDocument. queryCommandEnabled("createlink")){
editableDocument. execCommand('createlink', false, aLink);
}

Hiện tại, chúng ta xem xét các nút. Chúng là những hình ảnh mà bạn tùy ý trình bày sao cho hợp lý. Thông thường các định dạng nút nằm ngay trên khung soạn thảo như trong ví dụ này. Các lệnh in đậm, in nghiêng, gạch dưới được liên kết với hàm doFormat thông qua sự kiện nhấp chuột.



Php html sang rtf

Php html sang rtf

Php html sang rtf



Ham doFormat as after.



hàm doFormat(a,b){
if(editor. queryCommandEnabled(a)){
if(. b){b=null;}
trình chỉnh sửa. execCommand(a,false,b);
}
}


Như vậy, doFormat nhận vào 2 tham số.

- a. tên của lệnh
- b. value of command

Ở đây, trình soạn thảo là biến toàn cục đã được định nghĩa bên ngoài hàm như trình bày phía trên. Khi được gọi, doFormat sử dụng phương thức truy vấnCommandEnabled của trình soạn thảo để kiểm tra khả năng thực thi lệnh a. Sau đó, tiếp tục kiểm tra tham số thứ 2, nếu không thấy thì gán cho nó giá trị null. If could thi command, call method execCommand.

Đối với việc chèn hình ảnh và liên kết, có một chút khác biệt, chúng ta viết 2 hàm addLink và insertImage dành riêng cho nhiệm vụ này. Chúng được gọi theo cách tương tự như 3 nút lệnh trước.



Php html sang rtf

Php html sang rtf



Trong IE, bạn có thể viết.


biên tập viên. execCommand("CreateLink", true);

Hoặc.


biên tập viên. execCommand("InsertImage", true);

Quy trình duyệt này sẽ hiển thị một hộp thoại để người dùng nhập vào các tham số thích hợp.

http. //trang trại3. tĩnh. flickr. com/2014/2143437544_9b83c775e1_o. jpg

http. //trang trại3. tĩnh. flickr. com/2225/2143456580_e53ca630eb_o. jpg

Tuy nhiên, tính năng này chưa được Mozilla và Opera hỗ trợ, vì vậy, một số người thiết lập trình Rich Text Editor đã tự xây dựng các kiểu DialogBox riêng để thay thế. Việc đó không khó, nhưng trong bài viết này, chúng ta sẽ đơn giản hóa công việc bằng 1 hộp thoại nhắc.


Dưới đây là hàm addLink.



function addLink(){
var aLink=prompt('Nhập hoặc dán liên kết. ', '');
if(aLink){
doFormat('CreateLink', aLink);
}}}}
}

Và hàm insertImage :



hàm insertImage(){
tài liệu. getElementById('textArea'). nội dungWindow. focus();
var iURL=prompt('Nhập hoặc dán URL. ', '');
if(iURL){
doFormat('InsertImage', iURL);
}}}}
}

Khi người sử dụng click trên nút [http://b.imagehost.org/0395/link1.gif], một hộp thoại prompt bật ra để họ nhập chuỗi siêu liên kết. Hàm addLink kiểm tra lại chuỗi này, nếu có giá trị thị gọi doFormat với
2 tham số. "CreateLink" - tên lệnh, và aLink - URL đích do người dùng cung cấp.

Khi hàm insertImage được gọi, chúng ta sử dụng dòng lệnh đầu tiên để tập trung vào vùng soạn thảo. (Điều này là cần thiết để trình duyệt IE duyệt, bạn thử bỏ qua và chạy thử chương trình thì sẽ hiểu tại sao. ). Tiếp theo đó, 1 hộp thoại Nhắc mở yêu cầu người dùng nhập vào URL của hình ảnh. Cuối cùng, chúng ta gọi doFormat bằng lệnh "InsertImage" và giá trị iURL mà người dùng đã nhập.

Nút lệnh [http. // b. máy chủ hình ảnh. org/0457/removeformatting. gif] cho phép loại bỏ mọi định dạng trên phần văn bản được chọn.


Php html sang rtf


Chúng ta viết hàm xử lý như sau.


function unformat(){
doFormat('removeformat');
doFormat('unlink');
}

Không có gì để giải thích nhiều. Command "removeformat" loại bỏ toàn bộ các thiết lập kiểu dáng văn bản. Command "unlink" gỡ bỏ liên kết cho phần văn bản đó.

Cuối cùng, chúng ta có toàn bộ mã HTML và JavaScript như dưới đây.



Rich Text Editor












 
Php html sang rtf

Php html sang rtf

Php html sang rtf

Php html sang rtf

Php html sang rtf

Php html sang rtf







Bây giờ thì Editor của chúng ta đã có thể hoạt động trên Mozilla, IE, Opera và Safari.

Bản trình diễn.

http. // sacroroyant. đại học. cc/Ví dụ/Trình chỉnh sửa/V1/rte. htm

Phần sau, chúng ta sẽ tìm hiểu sâu hơn một số lệnh khác để mở rộng tính năng cho trình soạn thảo này, đồng thời viết lại kịch bản điều khiển Trình soạn thảo theo kiểu đối tượng. Refacing.

thần thánh

29-12-2007, 17. 56

Định dạng văn bản tại chỗ.

đậm. in đậm văn bản
tên phông chữ. chữ chữ, giá trị. tên phông chữ. VD. arial, verdana.
cỡ chữ. khổ chữ, giá trị. các số từ 1 đến 7.
màu nền trước. chữ. vValue. chuỗi tên hoặc mã màu. VD. #0000ff, hải quân.
hilitecolor. màu nền (1). vValue. chuỗi tên hoặc mã màu. VD. #0000ff, hải quân.
in nghiêng. làm nghiêng văn bản
chỉ số dưới. text low down so with normal
superscript. đưa văn bản lên cao hơn bình thường
underline. gạch dưới văn bản

Định dạng khối văn bản.

tiêu đề. Format for a title. vValue.
thụt lề. cho khối văn bản lui vào 1 tab
insertorderedlist. liệt kê theo thứ tự thứ tự
insertunorderedlist. liệt kê không đánh số.
justifycenter. căn giữa
justifyfull. dàn đều 2 biên
justifyleft. căn trái
justifyright. căn cứ phải
outdent. cho block text lui ra 1 tab

Các lệnh khác.

tạo liên kết. tạo liên kết. vValue. chuỗi URL
xóa. xóa phần lựa chọn
inserthorizontalrule. chèn vào 1 phần tử
inserthtml. chèn vào 1 chuỗi HTML (2)
chèn hình ảnh. insert image. vValue. path to file image.
xóa định dạng. type bỏ các định dạng trong phần lựa chọn.
hủy liên kết. loại bỏ liên kết trong phần lựa chọn.

The command control editor.

hoàn tác. Khôi phục lại trạng thái trước khi có 1 thay đổi được ghi nhận (3)
redo. Khôi phục lại trạng thái trước khi hoàn tác 1 bước.
chọn tất cả. chọn toàn bộ bộ biên tập nội dung.

Danh sách trên chưa đầy đủ, nhưng là những gì cơ bản nhất cho 1 trình soạn thảo văn bản. Chúng là các lệnh nhận được sự hỗ trợ chung của nhiều trình duyệt.

Nhắc lại cú pháp của execCommand.

editableDocument. execCommand(sCommand [, bUserInterface] [, vValue])

Trong đó.

editableDocument. tham chiếu tên biến đến phần tử tài liệu của iframe đối tượng được sử dụng để thiết lập khung soạn thảo giả.
sLệnh. chuỗi tên lệnh. Không phân biệt được hoa - normal.
bGiao diện người dùng. biến tùy chọn hiển thị các DialogBox. Luôn luôn thiết lập là sai để tránh lỗi trong Mozilla và Opera.
giá trị. value for command. Nếu lệnh không cần chỉ định giá trị, sử dụng null.

Thông thường vValue là 1 chuỗi, ngoại trừ giá trị cho kích thước chữ có thể định dạng interger, nhưng nói chung vẫn nên đưa về kiểu chuỗi.

* Chú thích.


Với IE, cần thay bằng command backcolor.
Chỉ lệnh hỗ trợ Mozilla duy nhất này. Với IE, có thể sử dụng các lệnh cụ thể cho từng đối tượng muốn chèn, như. InsertInputButton, InsertTextArea, InsertMarquee. Xem thêm tại đây (http. //msdn2. Microsoft. com/en-us/library/ms533049%28VS. 85%29. aspx).
Các thay đổi được ghi nhận có thể là bất cứ hành động nào làm đi nội dung khác vốn có trong Trình chỉnh sửa, chẳng hạn như việc nhập vào, xóa đi, hoặc đổi màu 1 ký tự. Hoàn tác và Làm lại chỉ làm việc hoàn hảo trong Mozilla.

beham

30-12-2007, 19. 43

Tôi xin thêm cái chuyển đổi giữa chế độ code và chế độ deisgn mặc định + lấy nội dung mã HTML trong richtext mà mình sẽ cần khi "đăng" bài









Rich Text Editor - Sacroyant Nguyen









Rich Text Editor























Author by
Sacroyant Nguyen
- Email.
- ©2007




thần thánh

31-12-2007, 22. 11

Khi ôm lấy những khái niệm xung quanh thuộc tính designMode và phương thức execCommand, việc xây dựng Rich Text Format Editor không còn là điều khó khăn nữa. Có thể những bạn nào qua topic này, lần đầu tiên nghe nói đến các khái niệm trên, sẽ có cùng cảm giác như vậy. Hiểu vấn đề là giải quyết vấn đề.

Các trình WYSIWYG build thường khá cồng kềnh. Chúng càng cố khoác lên mình vẻ bề ngoài của các ứng dụng soạn thảo văn bản máy tính để bàn thì hình thức càng dò xét, bề bộn, với những tính năng mà chúng ta có thể không bao giờ sử dụng đến.

Đây là một số trình soạn thảo WYSIWYG phổ biến.


* Trình soạn thảo văn bản đa dạng thức miễn phí (http. //www. freerichtexteditor. com/trang/3. htm)
* Trình chỉnh sửa SPAW (http. //www. solmetra. com/en/disp. php/en_products/en_spaw/en_spaw_demo)
* Xinha (http. //xinha. phe nhóm. com/)
* Trình chỉnh sửa xuyên web (http. //koivi. com/WYSIWYG-Editor/)
* Trình soạn thảo văn bản đa dạng thức trên nhiều trình duyệt (http. // kevinroth. com/rte/demo. htm)

Các Editor cũng giống như mọi ứng dụng nền web ứng dụng, đều có giới hạn chế độ phải phụ thuộc vào mức độ hỗ trợ của các trình duyệt. Một ứng dụng web có thể hoạt động trong nhiều trình duyệt khác nhau, không có lỗi khi chạy và ít rắc rối, thì dễ gây cảm xúc hơn những trò chơi hoa lá.

Quay lại những trình soạn thảo mà các dịch vụ web sử dụng thì cái của Gmail (http. //email. Google. com/) hợp với mỹ cảm của tôi hơn cả. Ở đó có sự hài hòa giữa tính đơn giản, vẻ đẹp trang nhã và khả năng hoạt động chuẩn xác, hoàn hảo.

Do bài viết này chỉ nhằm mục đích giới thiệu cách xây dựng trình thảo WYSIWYG, chúng ta nên giữ nguyên cấu hình của bản trước mà không cần thêm các nút định dạng lệnh khác trên thanh công cụ .

The ta start by đoạn script.




var RTE=null;
var isIE=document. tất cả đều đúng. false;
var isMz=(navigator. appName=='Netscape')?true. sai;

hàm rel(id){
trả về tài liệu. getElementById (id). null;
}
hàm setHTML(el,sHTML){
if(rel(el)){
rel(el).innerHTML=sHTML;
}
else{
alert('Không tìm thấy phần tử "'+el+'". ');
}
}
function setBtnAction(btnID, Action){
var . addEventListener){
if(el.addEventListener){
el. addEventListener('click', new Function(Action), false);
}
else if (el. attachmentEvent){
el. AttachEvent('onclick', new Function(Action));
}
}


rel trả về phần tử dựa trên id . setHTML có nhiệm vụ gán mã HTML vào 1 phần tử nào đó.

setBtnAction chỉ định 1 hành động cho 1 nút bên dưới sự kiện nhấp chuột. Hàm này nhận vào 2 tham số. ID của nút và chuỗi tên hành động. Ví dụ chúng ta có nút btnBold hiển thị dưới dạng 1 biểu tượng nhỏ.


Php html sang rtf


Nếu muốn chương trình thực thi lệnh doFomat("bold"), khi nhấp vào hình ảnh này, chúng ta chỉ thực hiện lệnh gọi hàm.


setBtnAction('btnBold', 'doFormat("bold")');

Khi chuỗi 'doFormat("bold")' được truyền vào hàm setBtnAction, .

Giữ nguyên các thành phần điều khiển Editor như cũ, chúng ta viết lại mã HTML.








.




 
Php html sang rtf

Php html sang rtf

Php html sang rtf

Php html sang rtf

Php html sang rtf

Php html sang rtf




Thay vì nhúng các hàm vào từng button, chúng ta đã cho mỗi hình ảnh một giá trị ID.

Nếu cấu hình điều khiển WYSIWYG của chúng ta giống như 1 đối tượng, nó có thể mang các thuộc tính cơ bản như bản chất. tên, kích thước vùng làm việc, nội dung bên trong. Và bên cạnh đó là 1 loạt các phương thức thi hành công việc định dạng văn bản. chèn liên kết, chèn hình ảnh. This is a build function.



hàm RichTextEditor(sID, oContain, sDefaultText, iWidth, iHeight){

cái này. ID=sID;
này. content=sDefaultText;
cái này. chiều rộng=(iWidth>300?iWidth. 500);
này. chiều cao=(cân nặng>80?Chiều cao. 200);

var sEditor='';';';
sEditor+='" style="width:'+this.width;
sEditor+='px;height:'+this.height;
sEditor+='px;overflow:auto;">';

setHTML(oContain,sEditor);

this. Giao diện người dùng = tài liệu. getElementById(cái này. TÔI). contentWindow;
cái này. biên tập = cái này. giao diện người dùng. tài liệu;

với(cái này. editor){
designMode='On';
open();
write('');');');
close();
}
}


Các tham số :

sID. chuỗi tên riêng cho từng Editor, bằng cách này, chúng ta có thể sử dụng nhiều Editor trên cùng 1 trang web.
oChứa. phần tử chứa Editor mà các khung soạn thảo sẽ được tạo bên trong.
sVăn bản mặc định. default text display when Editor open. Đây là 1 chuỗi HTML.
iWidth. chiều rộng của khung soạn thảo.
iHeight. chiều cao của khung soạn thảo.

Trong hàm dựng, chúng ta thiết kế các thuộc tính.

ID. định danh riêng
nội dung. nội dung văn bản trong trình soạn thảo
chiều rộng. chiều rộng
chiều cao. chiều cao
UI. tham chiếu đến khung iframe
editor. tham chiếu đến tài liệu đối tượng của khung iframe. Biến này trực tiếp thi hành các lệnh.

Hàm doFormat ở bản cũ sẽ trở thành phương thức formatText của lớp đối tượng RichTextEditor.



RichTextEditor. nguyên mẫu. formatText=function(dấu phẩy, giá trị){
if(this. biên tập viên. queryCommandEnabled(lệnh)){
if(. value){value=null;}
cái này. biên tập viên. execCommand(command,false,value);
}
}



Và tương tự cho addLink, insertImage, unformat.



RichTextEditor. nguyên mẫu. addLink=function(){
var aLink=prompt('Nhập hoặc dán liên kết. ', '');
if(aLink){
this. formatText('CreateLink', aLink);
}
}
RichTextEditor. nguyên mẫu. insertImage=function(){
this. giao diện người dùng. focus();
var aLink=prompt('Nhập hoặc dán URL. ', '');
if(aLink){
this. formatText('InsertImage', aLink);
}
}
RichTextEditor. nguyên mẫu. unformat=function(){
cái này. formatText('removeformat');
cái này. formatText('unlink');
}


Xin ra chúng ta cũng thêm vào 1 phương thức mới là getContent để lấy nội dung văn bản.


RichTextEditor. nguyên mẫu. getContent=function(){
return cái này. biên tập viên. thân thể. innerHTML;
}

Cuối cùng là 1 hàm dùng để khởi tạo trình soạn thảo, được gọi sau khi trang tải xuống để chỉnh sửa.



function init(){

RTE=new RichTextEditor('RTE', 'wysiwyg', '', 500, 240);

setBtnAction('btnBold', 'RTE.formatText("bold")');
setBtnAction('btnItalic', 'RTE. formatText("italic")');
setBtnAction('btnUnderline', ' RTE. formatText("underline");');
setBtnAction('btnInsertImage', 'RTE. insertImage();');
setBtnAction('btnAddLink', 'RTE. addLink();');
setBtnAction('btnUnformat', ' RTE. unformat();');
}


Biến RTE được sử dụng để thể hiện lớp RichTextEditor. Các dòng sau thiết lập hành động cho từng nút lệnh trên thanh công cụ.

init is call onload the same event.


cửa sổ. onload=init ;

Và thế là chúng ta đã có phiên bản Rich Text Editor mới, tuy không thay đổi trên giao diện, nhưng cấu trúc chương trình đã trở nên chặt chẽ hơn Chắc chắn.

Bản trình diễn.
http. // sacroroyant. đại học. cc/Ví dụ/Trình chỉnh sửa/V1/rte2. htm


Còn đây là sản phẩm hoàn thiện.


http. // d. máy chủ hình ảnh. org/0758/Biên tập viên. png (http. // sacroroyant. đại học. cc/Examples/Editor/)

Từ bản demo Rút ​​gọn đến sản phẩm sau cùng chỉ còn một khoảng thời gian ngắn, và chắc chắn bạn sẽ thấy dễ chịu hơn nếu đi tới đó một mình lol

thần thánh

03-01-2008, 13. 00

Clipboard là một vùng nhớ tạm thời trong cửa sổ, nơi chứa dữ liệu mà chúng ta đã sao chép hoặc cắt. Các ứng dụng khác nhau vẫn được phép sử dụng chung khối dữ liệu này. Có nghĩa là bạn có thể sao chép văn bản trong MS Word, sau đó dán lên khung soạn thảo của Google Docs (http. // tài liệu. Google. com/).

Các lệnh "sao chép", "cắt", "dán" cho phép RTE của chúng ta làm điều này. Nhưng vì lý do an toàn, ngoại trừ IE, các trình duyệt khác đều mặc định vô hiệu hóa tính năng trên.

Nếu Java Script cố gọi lệnh này trên Mozilla, trình duyệt sẽ trả về lỗi.


Lỗi. [Ngoại lệ. Mã "Quyền truy cập vào dịch vụ XPConnect bị từ chối". kết quả "1011". "0x805303f3 (NS_ERROR_DOM_XPCONNECT_ACCESS_DENIED)"

Google Documents bắt lỗi này lại và cho ra thông báo.


http. //trang trại3. tĩnh. flickr. com/2111/2158772881_27c098df3f_o. jpg

Yêu cầu phương pháp đã được đưa ra để giải quyết nỗi sợ hãi này, đồng thời tránh việc phải yêu cầu người dùng thay đổi cấu hình trên hệ thống của họ. Một trong những phương pháp khá thú vị là sử dụng Action Script. Do ngôn ngữ này có thể thâm nhập sâu vào hệ thống của khách hàng nên 1 chương trình flash đã được viết ra để bổ sung khả năng vào nơi mà Java Script bất lực. (Xem chi tiết (http. //www. jeffothy. com/weblog/clipboard-copy/))

Nhưng nếu bạn đã từng sử dụng Zoho Writer (http. //nhà văn. zoho. com), bạn sẽ thấy họ vẫn đang thực hiện lệnh sao chép, cắt và dán hoạt động trên FireFox. Lần tìm giải pháp trong mã nguồn của một ứng dụng web phức tạp như Zoho Writer (http. //nhà văn. zoho. com) là một công việc không mấy dễ dàng. Chỉ còn cách dựa vào các biểu hiện để phán đoán.

Điều dễ nhận thấy là chúng ta không thể đẩy khối văn bản được sao chép hoặc cắt từ khung soạn thảo của Zoho Writer vào MS Word, và ngược lại, cũng không thể sử dụng lệnh dán trên khung . Từ đó cho thấy nội dung chỉ được lưu trong 1 biến tạm thời của kịch bản javascript mà Zoho Writer sử dụng.

Tuy nhiên, cách làm của Zoho Writer (http. //nhà văn. zoho. com) chưa hoàn toàn phục hồi. Hạn chế của nó là không ngăn chặn được "kiểu hợp nhất". Xem hình minh họa bên dưới.


http. //trang trại3. tĩnh. flickr. com/2351/2158265821_560faa7706. jpg (http. //trang trại3. tĩnh. flickr. com/2351/2158265821_291e7efe0b_o. jpg)

Đầu tiên tôi chọn đoạn văn bản "thuộc tính designMode", nhấn lệnh Copy bên trên toolBar, rồi đặt con trỏ vào cuối dòng tiêu đề - "Viết lớp cho trình soạn thảo", sau đó nhấn . Kết quả là chuỗi được dán sẽ mang định dạng của chuỗi tiêu đề bài viết mà không giữ nguyên kiểu dáng của nó. Nếu bạn quen dùng MS Word thì điều này thật đáng ngạc nhiên.

Chúng ta sẽ giải quyết vấn đề một cách triệt để hơn Zoho. Ý tưởng cơ bản là tạo ra 1 bản sao chính xác của phần văn bản được chọn, lưu nó vào một biến tạm thời. Biến này đóng vai trò clipboard, được xem như 1 thuộc tính của lớp RichTextEditor.

Với mỗi lệnh, chúng ta sẽ có cách xử lý tương ứng.


bản sao. tạo bản sao của lựa chọn, lưu vào biến tạm thời.
cắt. sao chép rồi xóa đi phần lựa chọn văn bản.
dán. mount string in atemporary to back editor.


Để thực hiện ý tưởng, trước hết hãy tìm hiểu đôi chút về Lựa chọn và Phạm vi.

Phạm vi là một phần nội dung trong hồ sơ HTML, thường liên quan đến phần văn bản được đánh dấu bởi người sử dụng. Đối tượng này mô tả tất cả nội dung giữa điểm đầu và điểm cuối. Với các phương thức và thuộc tính của các đối tượng này, chúng ta có thể làm được khá nhiều việc với phần văn bản đang ở trạng thái được chọn. Cùng một thời điểm, có thể tồn tại nhiều phạm vi đối tượng.

Selection là đối tượng chỉ phần văn bản đang ở trạng thái được chọn và đang hoạt động. Nó cung cấp thông tin về văn bản và toàn bộ các phần tử nằm trong phần văn bản được chọn. Không hoàn toàn giống với Phạm vi, Lựa chọn liên quan đến các đối tượng văn bản, như. từ, câu, đoạn. In the 1 time point only could tồn tại 1 Lựa chọn.

Điểm khác biệt giữa Range và Selection khá tinh tế. Lấy 1 minh họa như hình dưới đây cho dễ hiểu.


http. //trang trại3. tĩnh. flickr. com/2337/2161283730_eb0c77167f_o. jpg

Nếu bạn tạo 1 Lựa chọn từ phần được chọn, các đối tượng này sẽ phản ánh chuỗi "đối tượng để sửa đổi tài liệu

Chính vì vậy, việc sử dụng Range cho phép chúng ta không những lấy ra phần text selection mà cả các phần tử chứa nó - các tag HTML, nghĩa là text selection có kèm theo định dạng :rolleyes:

VỚi Opera và Mozilla, bạn có thể tạo Range bằng phương thức createRange của đối tượng document, hoặc phương thức getRangeAt của đối tượng Selection. Khi chọn 1 đoạn text bất kỳ trên trang web, bạn có thể lấy nội dung phần được chọn bằng phương thức getSelection của window. Phương thức này cũng đồng thời tạo ra một đối tượng Selection.

Range có khá nhiều thuộc tính và phương thức. Danh sách đầy đủ bạn có thể xem tại đây (http://developer.mozilla.org/en/docs/DOM:range). Trong số này chúng ta sẽ cần đến 2 phương thức extractContents và cloneContents.

cloneContents trả về 1 bản sao chính xác của range hiện thời, tức là phần text được chọn. extractContents cũng tương tự cloneContents, nhưng loại bỏ range gốc. Kết quả trả về từ 2 phương thức này có dạng 1 đối tượng documentFragment. Tới đây chúng ta rơi vào lãnh địa của XML và DOM.

Vì documentFragment giống như mọi phần tử trong 1 hồ sơ XML, chúng ta sẽ dùng phương thức serializeToString của đối tượng XMLSerializer được các trình duyệt tuân thủ chuẩn W3C hỗ trợ, để chuyển phần hồ sơ XML đó về dạng chuỗi thông thường.


Ngược lại với serializeToString của đối tượng XMLSerializer là phương thức parseFromString của đối tượng DOMParser, cho phép bạn thao tác trên 1 chuỗi text bình thường như với một tập hợp node trong hồ sơ XML.

Chẳng hạn bạn có chuỗi s='125789', đây không phải là dữ liệu trong 1 hồ sơ XML nên bạn không thể xử lý result như phần tử XML. Và bạn cần parseFromString để làm điều đó.


Trở lại với công việc chính, theo logic chương trình như trên, chúng ta thêm vào class RichTextEditor 1 thuộc tính có tên là clipBoard :


function RichTextEditor(sID, oContain, sDefaultText, iWidth, iHeight){
this.ID=sID;
this.content=sDefaultText;
this.width=(iWidth>300?iWidth:500);
this.height=(iHeight>80?iHeight:200);
this.clipBoard='';
....

Và phương thức useClipboard được định nghĩa như dưới đây :


RichTextEditor.prototype.useClipboard=function(com mand){
if(isIE){
this.format(command);
}
else{
if(command=='cut'||command=='copy'){
var sel = this.UI.getSelection();
if(sel==''){return;}
var range = sel.getRangeAt(0);
var docFrag = (command=='cut')?range.extractContents():range.clo neContents();
var xmls = new XMLSerializer();
this.clipBoard=xmls.serializeToString(docFrag);
}
else if(command=='paste'){
if(this.clipBoard!=''){
this.format('inserthtml',this.clipBoard);
}
}
}
this.UI.focus();
}

useClipboard kiểm tra xem trình duyệt có phải IE không, nếu là IE thì thực hiện command bình thường. Ngược lại, bắt đầu phân tích command.

Với copy và cut, chúng ta tạo ra Selection


var sel = this.UI.getSelection();

Từ đối tượng Selection này, chúng ta tạo Range bằng phương thức getRangeAt(0). Ở đây, tham số 0 ám chỉ Range đầu tiên trong tập hợp Range.


var range = sel.getRangeAt(0);

Và clone của nó ở dạng documentFragment. Nếu là cut thì sử dụng extractContents, nếu là copy thì sử dụng cloneContents :


var docFrag = (command=='cut')?range.extractContents():range.clo neContents();

Cuối cùng , chúng ta khởi tạo XMLSerializer và chuyển chuỗi vào clipboard của Editor.


var xmls = new XMLSerializer();
this.clipBoard=xmls.serializeToString(docFrag);


Với paste, chúng ta dùng command inserthtml để chèn chuỗi từ clipboard vào editor :


this.format('inserthtml', this.clipBoard);

Thế là vấn đề đã được giải quyết xong. Bây giờ hãy thêm vào toolbar các lệnh Copy, Cut và Paste :


Php html sang rtf

Php html sang rtf

Php html sang rtf


Và thêm thiết lập action trong hàm init :


setActionOnButton('btnCut', 'RTE.useClipboard("cut");');
setActionOnButton('btnCopy', 'RTE.useClipboard("copy");');
setActionOnButton('btnPaste', 'RTE.useClipboard("paste");');

Kết quả sẽ như trang demo này :

http://sacroyant.uni.cc/Examples/Editor/V1/rte3.htm


:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::

* Bổ sung một chút

Phương thức unformat không hoạt động chính xác trên Opera, đã được sửa lại như sau :



var isOp=(navigator.appName=='Opera')?true:false;

RichTextEditor.prototype.unformat=function(){
if(isOp){
var sel = this.UI.getSelection();
this.format('inserthtml', sel);
}
else{
this.format('removeformat');
this.format('unlink');
}
}

Ban biên tập xin cáo lỗi cùng quý độc giả lol

thần thánh

28-02-2008, 05. 37

Nhúng bộ gõ chữ Việt

Để nhúng bộ gõ chữ Việt, chúng ta có thể sử dụng AVIM. Nó xử lý khá thông minh và hỗ trợ tốt các định dạng iframe có thể chỉnh sửa.

Bạn có thể tải AVIM từ trang web của tác giả. http. //hdang. đồng. uk/

Việc sử dụng khá đơn giản, bạn chỉ cần nhúng tệp JavaScript có tên là AVIM. js vào trong trang web chứa Editor, nó sẽ làm việc.

Điều duy nhất cần chú ý là nên bỏ chế độ kiểm tra chính tả, nó thường làm người sử dụng khó chịu khi nhập các thuật ngữ tin học bằng tiếng Anh. Ví dụ như ở diễn đàn này, khi tôi gõ AJAX, nó sẽ thành công. Unknown.

Để loại bỏ chế độ sửa chữa mô tả chính xác, bạn mở AVIM. js, edit the dockspell value value to 0, default of it is 1.

AVIM hỗ trợ 5 kiểu gõ. AUTO, TELEX, VNI, VIQR, VIQR*. Tuy nhiên, hiện nay được sử dụng nhiều nhất vẫn là VNI, trong trang demo dưới đây, tôi chỉ sử dụng VNI.

http. // sn. người viết blog. org/Biên tập viên/

http. //trang trại4. tĩnh. flickr. com/3068/2297096106_db8af3f757_o. jpg


Đăng dữ liệu trong Trình soạn thảo với AJAX

Để có thể sử dụng AJAX gửi nội dung văn bản trong trình soạn thảo từ máy chủ lên, chúng ta thêm vào 2 hàm sau.


function cod(s){return encodeURIComponent(s);}
function AJAXControl(){
var req=null; . ActiveXObject){
if(window.ActiveXObject){
req=new ActiveXObject("Msxml2. XMLHTTP");
if(. req){
req=new ActiveXObject("Microsoft. XMLHTTP");
}
}
else if(window. XMLHttpRequest){
req=new XMLHttpRequest();
req. overrideMimeType('text/html');
}
return req;
}

. Bây giờ tôi thêm 2 phương thức khác là getText và doPost. Phương thức getText cho phép lấy toàn bộ văn bản trong văn bản mà không tính đến định dạng mã. Phương thức do Post làm nhiệm vụ gửi nội dung văn bản có định dạng HTML code đính kèm.


RichTextEditor. nguyên mẫu. getText=function(){
return isIE?this. biên tập viên. thân thể. nội dung. cái này. biên tập viên. thân thể. t extContent;
}

RichTextEditor. nguyên mẫu. doPost=function(mục tiêu){
var content=this. getContent();
if(content==''){
alert("Không có dữ liệu để gửi. ");
return;
}
else if(this. getText(). length
alert("Tin nhắn quá ngắn. ");
return;
}
else{
val='content=' . =null&&typeof(req). =undefined){
var req=AJAXControl();
if(req!=null&&typeof(req)!=undefined){
yêu cầu. onreadystatechange =function(){
if(req. readyState==4 && yêu cầu. status==200){
var response=req. responseText;
//xử lý kết quả trả về
}
req. open("POST", target, true);
req. setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
req. send(val);
}
}
}

Như vậy, phương thức doPost . Các vấn đề xem khá đơn giản và không cần giải thích gì thêm.

Một ví dụ minh họa là Phần Thảo luận - Góp ý (http. //thuvienvl. đại học. cc/?action=discussion) trên Võ lâm văn sĩ giai phẩm quán (http. //thuvienvl. đại học. cc/?).

http. //thuvienvl. đại học. cc/?action=discussion

http. //trang trại4. tĩnh. flickr. com/3127/2296331757_90e29cd460. jpg (http. //trang trại4. tĩnh. flickr. com/3127/2296331757_0356013a9a_o. jpg)

(Bác nào hiểu rõ về lỗi XSS thì kiểm tra giúp mình với lol)

Bài hướng dẫn này xin dừng ở đây. Nếu các bạn còn thắc mắc gì thêm, xin vui lòng cho biết, tôi sẽ cố gắng trả lời trong thời gian nhanh nhất.

Tạm biệt.

thần thánh

13-07-2008, 11. 03

Cám ơn bác thần thánh rất nhiều. Em cũng đã làm được rồi nhưng em vẫn chưa biết dữ liệu được lấy từ bàn phím vào iframe rồi sẽ sử lý tiếp thế nào nữa. if em to it into a form, then will must get data as THẾ NÀO. Một lần nữa xin cám ơn bác. D.

Hôm nay vẫn ghé mà không để ý có bạn hỏi, xin lỗi.

Ở phần này (http. //www. đth. com/showthread. php?p=978864#post978864) mình đã trình bày các phương thức của Editor, bao gồm getContent. That is used to get content in Editor.

Có nhiều cách đăng nội dung này lên máy chủ. Bạn không giới hạn sử dụng 1 input ẩn, khi gửi biểu mẫu thì gọi 1 hàm javascript có nhiệm vụ.

- lấy nội dung trong trình chỉnh sửa bằng getContent
- chuyển nội dung vào chế độ ẩn đầu vào
- thực hiện các kiểm tra khác .
- gửi biểu mẫu như bình thường.

Khi đó, ở máy chủ, nếu bạn viết mã bằng PHP, và tên thẻ nhập ẩn là "dữ liệu" giả tạo, thì nội dung gửi lên được ghi nhận bằng $_POST["data"] .

Trong trường hợp dùng AJAX, bạn không cần tạo input ẩn.

thần thánh

15-07-2008, 08. 13

cách lấy nội dung trong trình soạn thảo thì em đã hiểu nhưng em vẫn chưa biết truyền nội dung đó nên ẩn đầu vào như thế nào. D. Em sẽ phải tạo một kiểu đầu vào ẩn nhưng giá trị của nó em sẽ phải làm sao. D. Mong anh thông cảm em mới học java script nên đừng bao nhiêu. D.

Giả sử chúng ta đã có 1 trình soạn thảo trên trang như trong các hướng dẫn bài viết. Bây giờ để đăng nội dung trong trình chỉnh sửa lên 1 tệp xử lý gửi. php theo cách truyền thống. Chúng ta tạo 1 biểu mẫu.







Và đây là hàm doSend :


hàm doSend(){
var content=RTE. getContent();
// kiểm tra dữ liệu nếu muốn.
//.

//gán giá trị trong trình soạn thảo vào đầu vào ẩn.
tài liệu. f. dữ liệu. value=content;

//và gửi biểu mẫu.
tài liệu. f. submit();
}

Cuối cùng là gửi. php, sợ gì mà không kiểm tra nhỉ. )


?$content=$_POST['data'];
echo $content;< . < . < .
?>


- Trong cấu trúc của hồ sơ HTML , form trên không nhất thiết phải bao lấy phần editor.
- Nếu sử dụng iframe ẩn, bạn chỉ định mục tiêu cho biểu mẫu. Cách này phù hợp hơn cả khi làm việc với các WYSIWYG.
- Nếu truyền dữ liệu qua XMLHttpRequest, bạn không cần phải tạo biểu mẫu này nếu không có các trường khác phải gửi đi. Đây là cách người dùng thích sử dụng nhất.

Cảm ơn bạn đã quan tâm đến chủ đề này. )

thần thánh

12-08-2008, 17. 47

@sacroyant. bạn chèn thêm Yahoo eco bằng hàm nào thế nhỉ ?
mình có xem mã nguồn bạn chia sẻ chỉnh sửa xong chưa tìm ra.
Cảm ơn.

Đến biểu tượng cảm xúc của Yahoo. IM vào editor, mình tạo 1 mảng đa chiều.


cái này. biểu tượng cảm xúc=[
['hạnh phúc','. )','1. gif'],
['buồn','. (','2. gif'],
['rose','@};-','53. gif'],
['cà phê','~O)','57. gif'],
['chớp mắt',';;)','5. gif'],
['cái ôm lớn','>. D
['bối rối','. -/','7. gif'],
['tình yêu sét đánh','. x','8. gif'],
['đỏ mặt','. ">','9. gif'],
['lưỡi','. P','10. gif'],
['bất ngờ','. -O','13. gif'],
['cool','B-)','16. gif'],
['khóc','. ((','20. gif'],
['cười','. ))','21. gif'],
['mặt thẳng','. ','22. gif'],
['đừng nói với ai nhé','. -$','32. gif'],
['ngáp','(. ','37. gif'],
['suy nghĩ','. -?','39. gif'],
['d\'oh','#-o','40. gif'],
['vỗ tay','=D>','41. gif'],
['angel','O. )','25. gif'],
['daydreaming','8->','105. gif'],
['kiss','. -*','11. gif'],
['gif','X(','14. gif'],
['lo lắng','. -S','17. gif'],
['đang chờ','. -w','45. gif'],
['Tôi không biết','. -??','106. gif'],
['xấu hổ về bạn','[-X','68. gif'],
['huýt sáo','. -"','65. gif'],
['đang cầu nguyện','[-O
['nháy mắt',' ;)','3. gif'],
['cười toe toét','. D','4. gif']
];

Như vậy này. biểu tượng cảm xúc[n][0] là ý nghĩa của biểu tượng, hiển thị dưới dạng tiêu đề khi di chuột lên. cái này. biểu tượng cảm xúc[n][1] là ký tự viết tắt của biểu tượng cảm xúc. Và cái này. biểu tượng cảm xúc[n][2] là tên tệp hình (mà Yahoo. set for).

Sau đó mình viết 1 phương thức có tên là osl (nghĩa là Open Smiley List ấy mà. )) để duyệt qua các chiều của mảng và tạo thành 1 bảng biểu tượng.


cái này. osl=function(){
var s='
var h=0,k=0;
for(var i=0;i<8;i++){
s+='

 
';
this.sm('btnEmoticon',s);
}

this. sm (sm = Set Menu)là phương thức được sử dụng để gán 1 chuỗi vào menu con thuộc tính.

cái này. is (is = Instance) là biến nội dung giữ vai trò hiện tại của Editor.

cái này. emoticonPath thuộc tính có giá trị đường dẫn đến thư mục chứa các hình ảnh.

Khi click vào 1 biểu tượng cảm xúc thì gọi phương thức insertImage với tham số là URL của file cấu hình.


onclick="'+this. là +'. insertImage(\''+this. biểu tượng cảm xúcPath+this. emoticons[(h+j)][2]+'\');"

Phương thức insertImage as after.


cái này. insertImage=function(url){
cái này. cm();
này. giao diện người dùng. focus();
var aLink=(url==null)?prompt('Nhập hoặc dán URL. ',''). url;
if(aLink){
this. fmt('InsertImage', aLink);
}
}

trong đó.

- cái này. cm(). close menu if have (cm = Close Menu)

- this. giao diện người dùng. tiêu điểm(). tập trung vào vùng soạn thảo.

Nếu không có tham số truyền vào cho phương thức, nó sẽ hiển thị hộp thoại nhắc nhở để nhận 1 đường dẫn cho hình ảnh muốn chèn. Nếu có tham số truyền vào, giá trị tham số sẽ được gán cho biến cục bộ aLink (ở đây là trường hợp nhất biểu tượng cảm xúc).

thần thánh

13-08-2008, 20. 42

site đó là thư viện truyện của bác ???
Bác có thể hướng dẫn chèn bảng hem ?
đang kết cái này mà hok . w00t.

Vâng, mấy cuốn hay hay tớ để đó coi dần :w00t:

Nếu bạn đã thành thạo HTML thì có khó khăn gì khi nhúng 1 bảng vào Trình chỉnh sửa không?. That qua that is insert 1 string HTML into only that. Ôi trời.

Hàm sau sẽ sinh mã HTML cho 1 bảng với số hàng và cột đã biết trước.


function createTable(rows, cols){
var s='
for(var i=0;is+='';
for(var j=0;js+='';
}
s+='';
}
s+='';
return s;
}

Bạn có thể thêm các tham số khác để cho phép người dùng tạo ra các table theo đúng ý họ muốn : width, height, border, cellpadding...

Chèn chuỗi vào vị trí con trỏ trong Editor rất đơn giản. Với IE, bạn tạo ra 1 Phạm vi đối tượng và sử dụng phương thức dánHTML của đối tượng này. Với các trình duyệt chuẩn, bạn sử dụng lệnh ImsertHTML.

Chúng ta có thể thêm 1 phương thức vào class Editor để chuyên trách nhiệm vụ nhúng các chuỗi, như sau.


Người chỉnh sửa. nguyên mẫu. insertStr=function(str){
if(isIE){
var aRange=this. biên tập. lựa chọn. createRange();
aRange. select();
aRange. pasteHTML(str);
}
else{
this. fmt('inserthtml',str);
}
}

Kết nối các điểm trên lại, bạn sẽ thấy cách tạo .

Ví dụ, mình viết 1 method insertTable đơn giản như dưới đây.


Biên tập viên. nguyên mẫu. insertTable=function(){
var r=prompt('Nhập số hàng. ','');
if(. r. isNaN(r). r
var c=prompt('Nhập số cột. ','');
if(. c. isNaN(c). c

cái này. insertStr(createTable(r, c));
}

Cách làm tiêu biểu là như thế đó bạn. w00t. vô tội.

[=========> Bổ sung bài viết

Đã thêm vào ví dụ.

http. //lovepm. đại học. cc/Ví dụ/Trình chỉnh sửa/

thần thánh

04-12-2008, 19. 07

Này này. Trước hết thank you Sacroyant nhiều.
Tui đang nghĩ tới 1 vấn đề chưa biết tìm ở đâu. Tui Upload tài liệu (doc, pdf. ) lên 1 thư mục trên WebServer, ý tôi bây giờ là khi viết bài, tôi muốn tạo siêu liên kết đến 1 tệp. doc thì làm sao nhỉ? .
Giống như nó tạo ra tag: Download
tóm lại là nó duyệt và tạo liên kết đến 1 tệp trên máy chủ chính? Bạn trả lời giúp tui nhé. Cảm ơn.

Cái này làm rất đơn giản. Ở phía client, bạn tạo ra 1 hộp thoại giả lập cửa sổ Open. Cửa sổ này có 1 vùng trống để liệt kê danh sách các tệp trong thư mục, phía dưới vùng liệt kê là 2 nút Mở và Hủy.

Giả sử dụng PHP, bạn viết 1 tệp đặt tên là danh sách. php đã giả sử, tệp này có nhiệm vụ duyệt thư mục và trả về danh sách các tệp bên trong. Use dir, filesize, filetype command. to get information about files. Dữ liệu gửi xuống máy khách có thể là XML, văn bản hoặc JSON tùy bạn.

Cuối cùng, bạn sử dụng AJAX để kết nối 2 phần việc lại với nhau.

Tóm lại chỉ cần vài bước rút ngắn.


Mở hộp thoại giả lập trên giao diện người dùng
Gọi danh sách tệp. php thực thi thông qua phương thức AJAX.
Xử lý dữ liệu nhận về.
Gán kết quả phân tích vào vùng liệt kê.


Bước 1 và 2 có thể đổi chỗ cho nhau.

pleiku83

05-12-2008, 14. 41

Tui hình dung được thủ tục đó, nhưng tui cũng mới nghiệp dư, đang phải tích phân cái source có sẵn chứ chưa biết nhiều và câu lệnh chính xác ntn. Đại khái tui xem qua cái Editor. js có sẵn, nó có đoạn khi "createlink" thì thi hành cái "execCommand(a,b)", cửa sổ Hyperlink mở ra như kiểu mặc định luôn như vậy, tôi ko biết có thể vô chỗ nào cả.
Bạn có thể chỉ chi tiết một chút được không.
- Use what command (code full) to open the open window.
- Danh sách tệp. nội dung php ntn? .
- Sau khi duyệt file (trên Server nó nhé, chứ ko phải Browser đến Computer đang dùng) nút OK submit cái gì để ghi hyperlink ra vùng text.
Tóm lại tui nghĩ nó cũng nhỏ nhỏ, bạn giúp tui code đầy đủ để đạt kết quả được ko? .

[=========> Bổ sung bài viết

Mà tại sao tui thấy mọi . com có ​​bộ Editor có nút "File đính kèm" để tạo link download file. If ko có nút này, vậy mấy trang web như. http. //Đà Nẵng. vnn. vn/tenmien/vanban. asp
hoặc tui muốn tạo 1 trang "báo cáo tài chính" trong đó vừa có text, vừa có link tải file đính kèm thì làm sao?
lãng nhẽ
(Mình dùng ASP, ko có CMS như Joomla)

thần thánh

05-12-2008, 17. 13

Cửa sổ mà tôi nói đến chỉ là cái khung để chúng ta trình bày các tệp trong thư mục mà người dùng truy cập. Nó không liên quan gì đến siêu liên kết lệnh của trình soạn thảo.

Làm cửa sổ giả lập thì rất đơn giản, bạn xem 1 ví dụ trên trang chủ của mình qua hình này.


http. //e. máy chủ hình ảnh. org/0468/1_7. png (http. // sacroroyant. trang google. com/chỉ mục. htm?nl=vi)

Lớp để mở cửa sổ soạn thảo như dưới đây.



Hộp thoại chức năng (id, chiều rộng, chiều cao, nội dung, tiêu đề, biểu tượng){
cái này. id=id;
này. chiều rộng=chiều rộng;cái này. height=height;
này. tiêu đề=tiêu đề; cái này. nội dung=nội dung;
này. biểu tượng=biểu tượng. '';
này. iconPath=biên tập. iconPath. '';
này. open=function(closeFunc){
if(editor&&isIE&&editor. biên tập){
biên tập viên. biên tập. tiêu điểm();
dấu trang = tài liệu. lựa chọn. createRange();
}
var s='';
var el=rel(this. Tôi). phong cách;
el. position='absolute';
el. chiều rộng = cái này. chiều rộng+'px';
el. chiều cao = cái này. chiều cao tính bằng px';

gWS();
of(this. id=='box'){waiting();}
el. top=parseInt((cái này. chiều cao
el. left=parseInt((cái này. chiều rộng
s+='
s+='';
s+=''+((this.icon!='')?(''):'')+'  '+this.title+'';
s+='';';';
s+='
s+='
s+=this. nội dung;
s+='';

show(this. id);gTxt(cái này. id, s);
rel(this. Tôi). Phong cách. position='absolute';
rel(this. Tôi). Phong cách. zIndex='202';
setOpacity(this. id, 98);
}
cái này. close=function(){
ẩn(cái này. id);hide("transit");
}
this. changeStatus=function(){
if(this. trạng thái==0){cái này. open();}
else{this. close();}
}
}

Bạn có thể xem đầy đủ mã nguồn khi Xem nguồn.

Trong trường hợp của bạn, cái mà chúng ta trình bày không phải là 1 editor giống như thế này.


http. //e. máy chủ hình ảnh. org/0785/2_2. png

Tôi không đọc kỹ phần trước của bạn. Bạn muốn tạo liên kết chứ không phải mở tệp được chọn, vậy thay vì Mở sẽ là Tạo liên kết. Muốn nó làm việc như thế nào là ở bước phân tích dữ liệu được trả về bởi danh sách. php. Ví dụ 1 tập tin bất kỳ trong danh sách sẽ có dạng mã này.

File XYZ

selectMe là hàm gửi giá trị tham số . Và khi nhấn CreateLink, nó sẽ gán đường dẫn vào lệnh thực thi tương ứng với việc tạo liên kết. Đây chỉ là 1 cách.


Nếu bạn đã hình dung được các bước thì nên cố gắng tìm hiểu và tự giải quyết từng bước sẽ tốt hơn là nhờ ai đó giúp đỡ hoàn toàn.

thần thánh

25-12-2008, 21. 38

Tôi đã làm Editor rồi, nhưng khi đưa văn bản vào Editor rồi Submit.
Khi text ít thì mình Submit được nhưng khi text dài thì khi Submit hiện ra 1 bảng thông báo Security Warning như thế này.
" Trang web hiện tại đang cố mở một trang web trên Internet. Bạn muốn cho phép điều này? .
Có 2 nút YES và NO
Và phía dưới có 1 Warning:
" Cảnh báo. cho phép điều này có thể khiến máy tính của bạn gặp rủi ro bảo mật.
Nếu không tin tưởng trang Web hiện tại thì chọn KHÔNG "
Nhưng mình nhấn YES nó vẫn ko Gửi dc, trang web đứng yên.
Tôi không biết giải quyết thế nào. Mong mọi người giúp đỡ. Tớ đang rất cần cái này vì tớ đang làm 1 module Tin tức.

[=========> Bổ sung bài viết

Tôi đang làm bằng JSP nhé. Mong được sự giúp đỡ.

Bác nào có kinh nghiệm về JSP xem giúp em với nhé. Tôi chưa từng chơi với em JSP này. You can also do how to configure the string string ?

ngoc_viet08

09-01-2009, 09. 56

Định dạng văn bản tại chỗ.

đậm. in đậm văn bản
tên phông chữ. chữ chữ, giá trị. tên phông chữ. VD. arial, verdana.
cỡ chữ. khổ chữ, giá trị. các số từ 1 đến 7.
màu nền trước. chữ. vValue. chuỗi tên hoặc mã màu. VD. #0000ff, hải quân.
hilitecolor. màu nền (1). vValue. chuỗi tên hoặc mã màu. VD. #0000ff, hải quân.
in nghiêng. làm nghiêng văn bản
chỉ số dưới. text low down so with normal
superscript. đưa văn bản lên cao hơn bình thường
underline. gạch dưới văn bản

Định dạng khối văn bản.

tiêu đề. Format for a title. vValue.
thụt lề. cho khối văn bản lui vào 1 tab
insertorderedlist. liệt kê theo thứ tự thứ tự
insertunorderedlist. liệt kê không đánh số.
justifycenter. căn giữa
justifyfull. dàn đều 2 biên
justifyleft. căn trái
justifyright. căn cứ phải
outdent. cho block text lui ra 1 tab

Các lệnh khác.

tạo liên kết. tạo liên kết. vValue. chuỗi URL
xóa. xóa phần lựa chọn
inserthorizontalrule. chèn vào 1 phần tử
inserthtml. chèn vào 1 chuỗi HTML (2)
chèn hình ảnh. insert image. vValue. path to file image.
xóa định dạng. type bỏ các định dạng trong phần lựa chọn.
hủy liên kết. loại bỏ liên kết trong phần lựa chọn.

The command control editor.

hoàn tác. Khôi phục lại trạng thái trước khi có 1 thay đổi được ghi nhận (3)
redo. Khôi phục lại trạng thái trước khi hoàn tác 1 bước.
chọn tất cả. chọn toàn bộ bộ biên tập nội dung.

Danh sách trên chưa đầy đủ, nhưng là những gì cơ bản nhất cho 1 trình soạn thảo văn bản. Chúng là các lệnh nhận được sự hỗ trợ chung của nhiều trình duyệt.

Nhắc lại cú pháp của execCommand.

editableDocument. execCommand(sCommand [, bUserInterface] [, vValue])

Trong đó.

editableDocument. tham chiếu tên biến đến phần tử tài liệu của iframe đối tượng được sử dụng để thiết lập khung soạn thảo giả.
sLệnh. chuỗi tên lệnh. Không phân biệt được hoa - normal.
bGiao diện người dùng. biến tùy chọn hiển thị các DialogBox. Luôn luôn thiết lập là sai để tránh lỗi trong Mozilla và Opera.
giá trị. value for command. Nếu lệnh không cần chỉ định giá trị, sử dụng null.

Thông thường vValue là 1 chuỗi, ngoại trừ giá trị cho kích thước chữ có thể định dạng interger, nhưng nói chung vẫn nên đưa về kiểu chuỗi.

* Chú thích.


Với IE, cần thay bằng command backcolor.
Chỉ lệnh hỗ trợ Mozilla duy nhất này. Với IE, có thể sử dụng các lệnh cụ thể cho từng đối tượng muốn chèn, như. InsertInputButton, InsertTextArea, InsertMarquee. Xem thêm tại đây (http. //msdn2. Microsoft. com/en-us/library/ms533049%28VS. 85%29. aspx).
Các thay đổi được ghi nhận có thể là bất cứ hành động nào làm đi nội dung khác vốn có trong Trình chỉnh sửa, chẳng hạn như việc nhập vào, xóa đi, hoặc đổi màu 1 ký tự. Hoàn tác và Làm lại chỉ làm việc hoàn hảo trong Mozilla.


cảm ơn về mấy cái lệnh rất hay này. tuy nhiên bạn có thể giới thiệu toàn bộ cho mình về tất cả các lệnh , hay có tài liệu đầy đủ cũng được ko ?
chứ biết được mấy cái này rồi mà giờ muốn viết thêm , phát . cảm ơn
ví dụ như chèn phương tiện , chèn đèn flash ,chèn hình ảnh chung dòng với hình hoặc chữ bao quanh hình. thì làm sao ?

ngoc_viet08

18-02-2009, 09. 27

execCommand => thực hiện 1 câu lệnh
queryCommandEnabled => trạng thái của các câu lệnh câu lệnh (bật / tắt )
queryCommandIndeterm => ?? .
queryCommandState => trạng thái của 1 command ???
queryCommandSupported => command này trình duyệt có được hỗ trợ ??
queryCommandValue => giá trị của command ???
bạn có thể giải thích rõ hơn về các cái này ko .
có trạng thái thì phải kiểm tra 1 đoạn văn bản đã được áp dụng lệnh chưa để làm như bạn thuyhuongcd nói nhỉ ?

còn lệnh createlink mình thấy ko hoạt động. cả trên demo của bác chủ topic cũng vậy. khi tạo ra 1 link thì chả thấy nó đâu.

một điều e ngại nữa là cái RTE này dùng để thuận tiện cho việc soạn bài gửi lên website. nhưng có vẻ nó ko mạnh lắm thì phải. ví dụ muốn tạo 1 hình ảnh và chỉ lên nó có chữ như thuộc tính Art của nó. hay tạo 1 liên kết đến 1 địa chỉ và liên kết đó được ghi bằng 1 tên khác như " trang chủ của tôi " cũng không bik làm sao
. Các bạn có thể giúp mình ko ?

[=========> Bổ sung bài viết

ờ . hóa ra xài addlink là nó biến đoạn đang chọn thành cái link .cái này mình mới biết.
Mình cần hỏi 1 vài thứ như.
- trong RTE của các diễn đàn. có mục chọn màu sắc cho văn bản. khi nhấp vào biểu tượng của nó, hãy chọn 1 bảng màu và chọn màu. cái đó mình phải dùng js để viết à ?
- làm sao để thiết lập 1 hình ảnh nằm riêng 1 dòng hay chữ sẽ nằm bao quanh hình ảnh đó.
mong các bạn giúp đỡ.

ngoc_viet08

13-03-2009, 11. 42

à , cho mình hỏi. làm sao lấy nội dung của editor bằng php để lưu vào mysql nhỉ. nó lấy innerHTML của body editor luôn hả ???

[=========> Bổ sung bài viết

à thấy rồi , ở trang 4. do mình đọc ko kĩ . thanks bạn sacroyant nhé .

[=========> Bổ sung bài viết

chức năng doSend(){< . getContent();
var content=RTE.getContent();
// kiểm tra dữ liệu nếu muốn.
//.

//gán giá trị trong trình soạn thảo vào đầu vào ẩn.
tài liệu. f. dữ liệu. value=content;

//và gửi biểu mẫu.
tài liệu. f. submit();
}
//
lại có vấn đề nữa. when submit form = câu lệnh js thế này thì làm sao xác định giá trị của lần gửi.
vì ở trang gửi. php
em check if (S_POST["name"]=="value") do trang send. php this , em used to handle many form from many pages other.

[=========> Bổ sung bài viết

////// .
cách nào để chèn 1 mẩu tin query từ csdl vào nội dung body của editor nhỉ .
em sử dụng trình chỉnh sửa để chỉnh sửa nội dung cũ từ csdl. nhưng không biết cách nào để viết vào trình soạn thảo, trong khi viết vào biểu mẫu thì dễ dàng. ai biết chỉ giúp.

thần thánh

22-06-2009, 13. 15

Quên không cho câu hỏi này của bạn. cười nhạo.


Giữ một điều thú vị nữa mà không thấy bàn tới đó là xác định trạng thái của một đoạn văn bản để thay đổi trạng thái nút nhấn tương ứng. Không giới hạn như trình soạn thảo của google khi di chuyển con trỏ vào vị trí chuỗi trong đậm thì nút đậm sẽ lồi xuống, di chuyển ra bên ngoài thì nó sẽ nổi lên

vui làm như vậy bạn phải sử dụng . Thuộc tính này trả về nút sâu nhất theo cấu trúc DOM trên vùng đã chọn. Từ đây bạn khảo sát tên và thuộc tính của nút cũng như các nút trên cấp để xác định kiểu đang được áp dụng với phần văn bản. Không giới hạn nếu tên thẻ là b hoặc giá trị độ dày phông chữ của kiểu thuộc tính là đậm, ta biết văn bản được chọn có thể hiển thị dưới định dạng đậm. Em thấy tính năng này không cần thiết lắm nên không được bỏ qua công việc. Thay vào đó, tôi mới sửa đổi cách hiển thị hộp thoại chèn liên kết và hình ảnh, không sử dụng dấu nhắc nữa, để có nhiều thiết lập hơn. Bạn có thể kiểm tra thử trên trang chủ của mình, nhưng phiên bản máy chủ của Google Page Creator này thì không hỗ trợ tải lên hình.


http. //img386. hình ảnh hack. chúng tôi/img386/3480/73011524. png


sacroyant ơi bạn dùng phần mềm nào soạn thảo php mà code màu đẹp vậy, nhìn rất có hứng thú code, bạn cho mình biết được không? .

Tớ dùng NotePad++ trên Windows và SciTE trên Linux.

Nhưng nếu bạn hỏi về việc trình bày code trên diễn đàn thì mình trả lời rằng với diễn đàn VBB thì chỉ cần đặt code vào cặp thẻ
là được.

Ví dụ.




cái này. blurItem=function(){
this. clearInfo();
if(this. đang chơi){
if(this. cc==cái này. con trỏ. cp){
var item=this. bộ sưu tập [này. cc]. mục [này. con trỏ. ip];
mục. bang=1;
mục. Out();
}
này. listStateUpdate();
}
}



Sẽ chọn kết quả.



cái này. blurItem=function(){
this. clearInfo();
if(this. đang chơi){
if(this. cc==cái này. con trỏ. cp){
var item=this. bộ sưu tập [này. cc]. mục [này. con trỏ. ip];
mục. bang=1;
mục. Hết();
}
này. listStateUpdate();
}
}

thần thánh

06-09-2009, 13. 02

Đóng chủ đề chưa nhỉ ? . com is being. Quý năm nay tôi gần như không dùng YM lol

Có chuyện gì thế bác DJT? Nếu cần liên hệ với tôi thì bác cứ gửi mail đến địa chỉ [email protected] là được. Mấy năm nay tôi gần như không dùng YM lol

[=========> Bổ sung cho bài viết

Tôi vừa nhận email của bạn kenphan19, nội dung như sau :


Chào bạn ^^.
Cảm ơn bạn đã có bài viết rất hay trên ddth. com. Mình đang viết riêng cho mình 1 cái RTE ^^. Nhưng đến phần focusNodes để nhận biết focus hiện tại đang ở đâu và liệt kê đầy đủ tag con và cha ^^ mình dùng jquery fw để viết. dựa trên hướng dẫn của bạn. Nếu các bạn giúp mình làm việc này nhé ^^, mình đang rất cần cái đó ^^ tìm hiểu về nó trong jquery thì nó tay. Giúp mình với nhé ^^

Cảm ơn trước ^^

Trước đây có 1 bạn thắc mắc vấn đề tương tự trong topic này và mình cũng đã trả lời . Nay xin nói rõ hơn một chút về phương pháp giải quyết.

Từ editor mẫu thứ 2 (http. //sacroyantlabs. trang google. com/rte2. htm), tôi đã chỉnh sửa lại một chút, chỉ giữ lại 3 nút cơ bản để minh họa.

Việc cần làm đầu tiên là chúng ta thêm vào 2 lớp CSS để biểu thị trạng thái khác nhau của định dạng nút điều khiển.


. btn {biên giới. đầu 1px #fccccc;}
. btn_ {viền. inset 1px #fccccc;}

Sau đó trong HTML, chúng ta thiết lập trạng thái mặc định cho các nút bằng cách thêm lớp thuộc tính.


Php html sang rtf

Php html sang rtf

Php html sang rtf


nhiệm vụ ghi nhận trạng thái của vùng văn bản đang hoạt động, chúng ta phải dựa trên các điều kiện của chuột và bàn phím như click, select, mouseup, keypress. Người dùng không giới hạn muốn đặt con trỏ vào giữa một từ in đậm, họ có thể điều khiển trên bàn phím hoặc sử dụng chuột. Chúng ta cần theo dõi các sự kiện như thế nào để xác định phần tử đang được chọn trong văn bản.

Trong ví dụ này, tôi chỉ theo dõi các sự kiện nhấn phím và di chuột. Sau khi tập lệnh được thêm vào khi khởi động thành công trường thảo luận. (Vui lòng nhớ lại đoạn mã khởi tạo đối tượng RichTextEditor hoặc mã tham khảo trong tệp đính kèm bên dưới).



.
cái này. biên tập = cái này. giao diện người dùng. tài liệu;
with(this. editor){
designMode='On';
open(); . content+'');
close();
}
if(this. biên tập viên. addEventListener){
cái này. biên tập viên. addEventListener('keypress', checkSelection, true);
this. biên tập viên. addEventListener('mouseup', checkSelection, true);
}
else if (this. biên tập viên. attachmentEvent){
này. biên tập viên. AttachEvent('onkeypress', checkSelection);
this. biên tập viên. AttachEvent('onmouseup', checkSelection);
}
.


Ở đây có hàm checkSelection, nó có dạng.


function checkSelection(){
var focusNode;
if(window. getSelection){
focusNode=RTE. giao diện người dùng. cửa sổ. getSelection(). focusNode;
}
else if (tài liệu. getSelection){
focusNode=RTE. giao diện người dùng. tài liệu. getSelection(). focusNode ;
}
else nếu (tài liệu. lựa chọn){
focusNode=RTE. giao diện người dùng. tài liệu. lựa chọn. tạoPhạm vi(). parentElement();
}
var currentTag=focusNode. cha mẹNode. tagName;

rel('btnBold').className=(currentTag=='B')?'btn_': 'btn';
rel('btnItalic'). className=(currentTag=='I')?'btn_ '. 'btn';
rel('btnUnderline'). className=(currentTag=='U')?'b tn_'. 'btn';

if(currentTag=='SPAN'. currentTag=='DIV'){
var atts=focusNode. cha mẹNode. getAttribute('style');
rel('btnBold'). className=(atts. indexOf('trọng lượng phông chữ. in đậm;'). ==-1)?'btn_'. 'btn';
rel('btnItalic'). className=(atts. indexOf('kiểu chữ. nghiêng;'). ==-1)?'btn_'. 'btn';
rel('btnUnderline'). className=(atts. indexOf('trang trí văn bản. gạch chân;'). ==-1)?'btn_'. 'btn';
}
}

Không có gì khó hiểu với hàm này. Được gọi khi có sự kiện keypress hoặc mouseup xảy ra trong vùng soạn thảo, checkSelection verify node are focus option theo trình duyệt. Sau đó nó tìm ra thẻ tên, nếu là B, I hoặc U thì cứ thay đổi trạng thái nút định dạng tương ứng.

Nếu là thẻ "chứa" (thẻ chứa) thì đi tìm kiểu giá trị thuộc tính và chuỗi xử lý này, sau đó mới xử lý nút điều khiển thay đổi trạng thái. Ví dụ được viết cho SPAN và DIV, các thẻ "chứa" khác như blockquote, table. tùy chọn bạn thêm vào.

Kết quả thu được mà bạn có thể kiểm tra trên trang minh họa.

http. //sacroyantlabs. trang google. com/rte4. htm

Còn đây là mẫu mã. http. //sacroyantlabs. trang google. com/Editor_FocusNode. rar

Ngoài trang minh họa, các bạn có thể thấy chức năng trên hoạt động không hoàn hảo vì muốn chính xác thì phải viết khá nhiều mã lệnh, nhưng phương pháp chung nhìn một cách đơn giản thôi .

meohoang11

03-10-2009, 18. 36

Truoc het minh thanks ban vi da share bo soan thao cho moi nguoi dung va phat trien them.

Hiển nay minh đang ứng dụng cái này của bạn cho web minh. Tuy nhiên, khi minh soan thao 1 phan van ban ( HTML co chua hinh va cac tag ), luu vao database , hien thi ra trang chu thi ok.
Tuy nhiên khi mình tải lại vào bộ soạn thảo để chính sửa chữa cơ sở dữ liệu thì không biết lỗi, không hiển thị luôn, bản có các chi minh cách khác phục.

code chen chua minh nhu sau.
< . < . < .

Code goi ham nhu sau:



neu du lieu lay ra tu database dang html don gian thi ok, nhung .

phungdinhvu

28-07-2010, 18. 09

bác sacroyant ơi cho em hỏi, em đang làm trang nè http. //kstn. tk/kstn. tk/những người khác/bài đăng mới. php?location=boxnews, dùng RTE rất đơn giản thui, khi test với FF thì được, còn khi test với IE thì.
em chọn chữ rồi, khi click vào font-weight để chọn chữ đậm hay chữ nghiêng. Thì vị trí lựa chọn trong RTE nó bị mất biến, thành ra mấy chức năng này nó bị vô hiệu. Bác có thể chỉ cho em chỗ sai được không? .
Cám ơn các bác nhé.

[=========> Bổ sung bài viết

bác thần thánh ơi cho em hỏi . //kstn. tk/kstn. tk/những người khác/bài đăng mới. php?location=boxnews, dùng RTE rất đơn giản thui, khi test với FF thì được, còn khi test với IE thì.
em chọn chữ rồi, khi click vào font-weight để chọn chữ đậm hay chữ nghiêng. Thì vị trí lựa chọn trong RTE nó bị mất biến, thành ra mấy chức năng này nó bị vô hiệu. Bác có thể chỉ cho em chỗ sai được không? .
Cám ơn các bác nhé.

[=========> Bổ sung bài viết

các bác vào link này. http. //kstn. tk/chỉ mục. php?showthread=detail. 8
thi hộ em với, nói là như thế này, khi em chọn văn bản như thia nè.
http. //cA5. upanh. com/10. 781. 14920427. FBY0/testingRTE. png
roi sau do click vao mot vung nao do "font-weight", thi vung chon text no bi mat di, thang thu em khong chon bold hay italic duoc.
Pa con giup em voi, em tim mai khong ra loi ne.
phần biên tập mã phần tích. js của bac sacroyant ma khong tim duoc. Hix, chi tim duoc cai focus() lam viec voi IE, nhung cung khong duoc. hu hu, giup em voi cac bac oi.

[=========> Bổ sung bài viết

các bác vào link này. http. //kstn. tk/chỉ mục. php?showthread=detail. 8
thi hộ em với, nói là như thế này, khi em chọn văn bản như thia nè.
http. //cA5. upanh. com/10. 781. 14920427. FBY0/testingRTE. png
roi sau do click vao mot vung nao do "font-weight", thi vung chon text no bi mat di, thang thu em khong chon bold hay italic duoc.
Pa con giup em voi, em tim mai khong ra loi ne.
phần chỉnh sửa mã phần tích. js của bac sacroyant ma khong tim duoc. Hix, chi tim duoc cai focus() lam viec voi IE, nhung cung khong duoc. hu hu, giup em voi cac bac oi.

thần thánh

31-12-2010, 11. 33

Mấy bác xây dựng rich text editor làm gì trong khi có cái FCKeditor rồi (cực tầy luôn)

Nói như bác thì ta cũng chả nên sinh con đẻ cái làm gì, . w00t.

Trước, trong và sau cái sự đẻ đã có sự "sướng" mà :w00t:

Mới thì thích dùng cái mình làm hơn, muốn nó sao thì nó thế, không thừa không thiếu.


RTE, bản cuối, không hỗ trợ IE7-.

http. // sacroroyant. đại học. cc/Ví dụ/Biên tập viên/2010/rte. htm

Bản này định vị các nút bằng float, nên cho phép co giãn kích thước thoải mái, sử dụng ảnh sprite tất cả trong 1 rất gọn nhẹ, thêm bảng ký tự đặc biệt (hãy thỉnh thoảng tôi cần .

Cấu trúc chương trình tốt hơn cho phép tạo nhiều khả năng trên trang. Việc khởi tạo có thể ở phía người dùng cuối được đơn giản hóa đến mức thấp nhất, muốn bất kỳ div nào trở thành vùng soạn thảo, chỉ cần gán cho nó 1 id và gọi.


RTE. apply('divID')

Thiết lập kích thước cho trình soạn thảo tùy chọn chỉ định bên ngoài biểu định kiểu của bạn.

Có thể chỉ định kích thước ngay trong khi gán (sẽ ghi đè lên giá trị trong biểu định kiểu).


RTE. apply(elementID, defaultContent, width, height)

Source code share tại đây, bác nào rảnh rỗi thì xem thử cho vui lol

http. //www. hộp. net/shared/jzd0tbngv1