2011-09-16 26 views
7

Yo,Di Styles từ văn bản khi sao chép/cắt sử dụng CSS hoặc Javascript

Được rồi được noodling trên một này trong một thời: Làm thế nào copy/cut văn bản theo kiểu mà không mang theo bất kỳ hành lý phong cách (background-color, màu sắc , vv)?

Couple của các tuyến đường của các cuộc tấn công đã được thất bại:

  1. Phong cách văn bản khác nhau sử dụng :: chọn?Không làm việc, phong cách :: không được sao chép
  2. Phong cách văn bản đã chọn sử dụng jQuery chọn ràng buộcchỉ này hoạt động cho đầu vào, không p, div
  3. Intercept và loại bỏ phong cách bằng cách liên kết một sự kiện để sao chép/dán bằng jQuery?Không thể truy cập đối tượng đã sao chép để xóa nội dung, đã thử sử dụng e.preventDefault(); sau đó trả lại đối tượng sự kiện nhưng không hoạt động hoặc
  4. Sửa đổi dữ liệu khay nhớ tạm khi dữ liệu đã được lưu?Cũng không có con xúc xắc, hầu hết các trình duyệt sẽ không để ngươi vào đây mà không cần đèn flash và một số loại xác nhận

Dù sao, những suy nghĩ? Có vẻ như nó sẽ rất hữu ích cho các trang web có màu nền trắng.

+0

Để chắc chắn tôi hiểu, bạn muốn sao chép văn bản thuần túy vào khay nhớ tạm mà không có định dạng? –

+0

Yup. Tôi muốn ngăn chặn việc sao chép/cắt mặc định từ các kiểu lấy mẫu. Hoặc thậm chí awesomer làm chọn lọc, nói để lại font-gia đình và font-weight nhưng nix màu sắc và nền. Nếu tôi phải đoán làm thế nào để làm điều này, bạn muốn – Mojowen

+0

Thay đổi văn bản trước khi nó được sao chép. Sau khi mọi thứ được gửi đến clipboard, chúng dường như không thể truy cập được qua javascript. – Mojowen

Trả lời

4

Tôi chưa có thời gian để viết mã ví dụ bây giờ, nhưng bạn có thể thực hiện việc này để cắt/sao chép được kích hoạt bằng phím tắt. Nó sẽ không hoạt động để cắt/sao chép thông qua menu ngữ cảnh hoặc tùy chọn menu Chỉnh sửa vì nó dựa vào việc thay đổi lựa chọn người dùng trước khi sự kiện cắt hoặc sao chép kích hoạt.

Các bước:

  1. Xử lý các Ctrl - CCtrl - X phím tắt và các khoản tương đương Mac.
  2. Trong trình xử lý này, hãy tạo phần tử ngoài màn hình (vị trí tuyệt đối và bên trái -10000px) và sao chép nội dung đã chọn vào đó.Bạn có thể làm điều này bằng cách sử dụng window.getSelection().getRangeAt(0).cloneContents(), mặc dù bạn sẽ cần mã riêng cho IE < 9 và bạn nên kiểm tra lựa chọn không bị thu gọn.
  3. Làm bất cứ điều gì bạn muốn thay đổi kiểu dáng của nội dung của phần tử ngoài màn hình.
  4. Di chuyển lựa chọn để bao gồm nội dung của phần tử ngoài màn hình sao cho nội dung này bị cắt hoặc sao chép.
  5. Thêm thời gian trễ ngắn (một vài phần nghìn giây) bằng cách sử dụng window.setTimeout() gọi một hàm xóa phần tử màn hình và khôi phục lựa chọn ban đầu.
+0

Làm việc thông qua phần này, bất kỳ gợi ý nào về cách di chuyển lựa chọn? – Mojowen

+0

@Mojowen: Đây là một chức năng ví dụ để chọn nội dung của một phần tử: http://stackoverflow.com/questions/2044616/select-a-complete-table-with-javascript-to-be-copied-to-clipboard/ 2044793 # 2044793 –

+1

Tôi nghĩ tôi đã có nó, cảm ơn Tim. Với một số dọn dẹp, trông rất giống như thế này: http://jsfiddle.net/mojowen/hCHWy/ – Mojowen

0

Bạn có cần điều này xảy ra trong trình duyệt ... cho từng người dùng không?

Nếu không phải - và chỉ dành cho bạn - bạn có thể thực hiện việc này bằng phần mềm Clipmate.

http://www.clipmate.com/index.htm

Nó có tính năng xóa tất cả kiểu.

+0

Tôi đang tìm kiếm điều này xảy ra trên bất kỳ bản sao/cắt, không chỉ là một cái gì đó cụ thể. – Mojowen

1

Một khi bạn đã kích hoạt bản sao hoặc cắt bạn có thể tước các thẻ html và chỉ có văn bản với một số regex

var String = Sample.replace(/(<([^>]+)>)/ig,""); 

Ngoài ra nếu bạn có văn bản lưu trữ của bạn trong một div với id "sample_div" Sử dụng var String=$('sample_div').text(''); chỉ nhận được văn bản bên trong

+0

Vậy làm thế nào tôi sẽ sử dụng điều này trong bối cảnh một sự kiện sao chép/cắt? Tôi đã thử nó với: 'jQuery (tài liệu) .bind ('bản sao cắt', chức năng (e) { var String = Sample.replace (/ (<([^>] +)>)/ig," "); chuỗi trả về; }); ' Mẫu không được nhận dạng – Mojowen

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