2011-01-24 71 views
5

Giả sử tôi có một bộ số contenteditable="true" số div.Đánh dấu/chọn nhiều div có phạm vi w/có thể chỉnh sửa được?

<div id="0" contenteditable="true"></div> 
<div id="1" contenteditable..></div> 
<div...etc></div> 

Tôi không thể có một div, nhiều div là phải. Làm cách nào để đánh dấu nội dung của nhiều hơn một div? Sử dụng phạm vi? Còn gì nữa không?

+0

@ JC0C611: Các số không phải là giá trị hợp lệ cho 'id' theo W3C –

+0

Điều đó khá lạ, nhưng cho phép nói rằng "_0", "_1" ... v.v ... sẽ hợp lệ, đúng không? – JCOC611

+0

@ JC0C611: Mã ID và NAME phải bắt đầu bằng một chữ cái ([A-Za-z]) và có thể được theo sau bởi bất kỳ số chữ cái, chữ số ([0-9]), dấu gạch ngang ("-"), dấu gạch dưới ("_"), dấu hai chấm (":") và dấu chấm (".") (http://www.w3.org/TR/html401/types.html#type-name) –

Trả lời

6

Câu trả lời là tùy thuộc vào trình duyệt. Xem this example để kiểm tra hai phương pháp sử dụng Ranges. Những nỗ lực đầu tiên để tạo một Phạm vi cho mỗi chỉnh sửa có thể chỉnh sửa <div> và thêm tất cả chúng vào lựa chọn. Lần thử thứ hai để tạo một Phạm vi đơn bao gồm nội dung của hai số <div> s có thể chỉnh sửa.

Kết quả:

  • Trong tất cả các trình duyệt, nó là không thể cho người sử dụng để tạo ra một sự lựa chọn sống trong nhiều hơn một yếu tố có thể chỉnh sửa;
  • Firefox là trình duyệt dễ chấp nhận nhất của các trình duyệt chính. Cả hai phương thức lập trình đều hoạt động.
  • Safari và Chrome ít được phép nhất: cả phương pháp đều không chọn nội dung từ nhiều yếu tố có thể chỉnh sửa.
  • Opera 11 không hỗ trợ nhiều Dải ô trong vùng lựa chọn, nhưng không hỗ trợ Phạm vi được chọn bao gồm nhiều phần tử có thể chỉnh sửa.
  • IE phiên bản trước 9 không hỗ trợ phạm vi DOM hoặc cùng một API Selection giống như các trình duyệt khác, nhưng mã TextRange tương đương không cho phép lựa chọn từ nhiều yếu tố có thể chỉnh sửa.
+0

Cảm ơn rất nhiều! Tôi tự hỏi nếu nó có thể bắt chước các dải bằng cách sử dụng divs nền và javascript .. – JCOC611

+0

Tôi sẽ tiếp tục và chọn điều này làm câu trả lời được chấp nhận và tạo một câu hỏi khác về cách bắt chước các dải w/div và JS. – JCOC611

+0

@ JCOC611: Không quá nhiều Phạm vi bạn sẽ bắt chước như lựa chọn. Tạo ra nhiều Ranges như bạn thích làm việc tốt, nó chọn chúng là vấn đề. –

3

Có thể chuyển các div sang số contenteditable="false" khi đang bắt đầu lựa chọn một trong số chúng. Nội dung như thế này cung cấp cho bạn ý tưởng (sử dụng JQuery):

$('div').bind("selectstart", function() { 
    $('div').attr("contenteditable", false); 
});​ 

Here's a fiddle to demonstrate (chỉ được thử nghiệm trong Chrome).

Lưu ý trong ví dụ fiddle rằng ContentEditable Div đầu tiên lấy tiêu điểm. Điều này cho phép bạn loại bỏ như bình thường, nhưng ngay sau khi bạn chọn bất cứ điều gì, bằng cách sử dụng chuột hoặc bàn phím, bạn sẽ thấy bạn có thể mở rộng lựa chọn trên divs như bình thường.

Điều này rõ ràng là cần tìm ra để làm việc với nhiều trình duyệt và quay lại contenteditable="true" một cách thích hợp. Nhưng tôi nghĩ cách tiếp cận này là hợp lệ.

+0

thêm vào này một onclick -> contenteditable = true và bạn đang nửa chừng đó (đây là nơi tôi đang ở) – Prozi

+0

Nó đã giúp tôi .. có một câu hỏi .. Tôi làm như @Prozi nói nhưng nó không hiển thị con trỏ tại vị trí đó tôi có thể thêm nhưng con trỏ không có ở đó? bất kì giải pháp nào? demo: http://jsfiddle.net/T7b3r/55/ – Dhara

+0

http://jsfiddle.net/8b403yxy/ – Prozi

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