2013-05-26 80 views
5

Tôi có ý tưởng cho một ứng dụng web mà tôi sẽ yêu cầu toàn quyền kiểm soát chức năng của trình chỉnh sửa văn bản được nhúng và trình chỉnh sửa văn bản phải hoạt động chính xác chính xác trên trên tất cả các trình duyệt. Chức năng tiêu chuẩn contenteditable là không đủ cho nhu cầu của tôi trong dịp này.Tạo trình chỉnh sửa văn bản dựa trên web tùy chỉnh sử dụng các phần tử "span" - một ý tưởng tồi?

Vì vậy, tôi đã thử nghiệm các cách khác nhau để triển khai trình chỉnh sửa văn bản tùy chỉnh. Cách tiếp cận đầu tiên của tôi là phát hiện các cú click chuột để chèn dấu nháy (mặc dù không có dấu nháy có thể nhìn thấy vì dường như không có cách nào để đạt được điều này). Điều này làm việc khá tốt, nhưng tiếc là không có cách nào để hiển thị dấu mũ (còn gọi là I-beam nhấp nháy).

Điều này có nghĩa là dấu nháy nháy của tôi cũng phải được tùy chỉnh. Tôi chỉ có thể nghĩ ra hai cách tốt để đạt được điều này theo cách tương thích trên tất cả các trình duyệt.

  1. Tùy chọn đầu tiên (và tốt hơn) là triển khai công cụ bố cục tùy chỉnh bằng JavaScript giống như Google đã làm với Google Documents.

  2. Giải pháp thứ hai (có thể dễ dàng hơn nhiều) sẽ đóng gói mỗi ký tự trong phần tử <span> của riêng nó và do đó cho phép đặt dấu ngoặc đơn giữa các ký tự cụ thể. Điều này có nghĩa là sẽ có rất nhiều yếu tố span, nhưng điều này chắc chắn sẽ đạt được những gì tôi cần trong khi tận dụng lợi thế của công cụ bố trí trình duyệt. Một lợi ích khác với cách tiếp cận này là tôi không cần phải dựa vào các hacks chọn văn bản cụ thể của trình duyệt.

Vì vậy, câu hỏi của tôi, là lựa chọn # 2 một ý tưởng thực sự tồi? Nếu vậy, tại sao?

Trả lời

5

Trước hết - bạn có thực sự cần phải làm việc trên trình chỉnh sửa của riêng mình không? Có FirepadEtherpad với chỉnh sửa cộng tác khá thú vị và có lẽ nhiều trình chỉnh sửa nguồn mở hơn không dựa trên contenteditable. Thật khó để tạo ra trình soạn thảo như vậy, do đó, nó không có ý nghĩa để lãng phí thời gian vào nó.

Tuy nhiên, nếu bạn thực sự muốn thực hiện giải pháp của riêng mình và bạn cần chính xác hành vi tương tự trên tất cả các trình duyệt, thì bạn sẽ phải chịu số phận;). Ngay cả khi bạn sẽ tránh contenteditable thì chắc chắn có những thứ khác có thể xảy ra sai.

Dù sao, câu trả lời:

  1. tùy chọn đầu tiên là rất khó khăn và tốn nhiều thời gian ngay từ đầu nhưng nó mang lại cho bạn sức mạnh hơn rất nhiều so với cái thứ hai. Ví dụ. có công cụ sắp xếp hoàn toàn tùy chỉnh, bạn sẽ có thể triển khai ngắt trang mà không cần đợi triển khai CSS3 (mà bạn sẽ không bao giờ có thể dựa vào, vì bạn muốn chính xác hành vi tương tự trên tất cả các trình duyệt). Và trên thực tế, bạn sẽ có thể bỏ qua hầu hết các khác biệt hiển thị của trình duyệt. Nhưng, trừ khi bạn có một đội ngũ nhà phát triển JS phong nha và vài tháng (ít nhất), tôi thậm chí sẽ không bắt đầu nghĩ về điều đó.

  2. Giải pháp thứ hai - sử dụng lại DOM là thực tế hơn. Tôi sẽ thực hiện một số bài kiểm tra hiệu suất trước, nhưng có khoảng thời gian cho mỗi nhân vật sẽ dễ dàng tìm ra vị trí cần đặt sau khi nhấp chuột. Nếu không có nó đòi hỏi một số thủ thuật ... Mà tôi không biết.Bạn có thể thử kiểm tra Etherpad và Firepad (sử dụng Ace code editor) như thế nào, nhưng vẫn gói - sẽ là lựa chọn dễ dàng nhất và ít nhất là trên trình duyệt phong nha, nó không gây ra vấn đề hiệu suất, trừ khi bạn muốn chỉnh sửa tài liệu thực sự dài (thì bạn có thể bắt đầu một số tối ưu hóa).