2013-07-16 47 views
15

Tôi muốn chọn văn bản bằng cách gửi địa điểm/anchorOffset và thời gian/bù đắp sử dụng Javascript Đây là mã của tôiSet lựa chọn bởi phạm vi trong Javascript

var node = document.getElementById("content"); 
    var range = document.createRange(); 
    range.setStart(node, 0); 
    range.setEnd(node, 4); // here 0 and 4 is my location and length for the selection 
     // if my string is "This is test string" in my case its must select "This" 
    var selection = window.getSelection(); 
    selection.removeAllRanges(); 
    selection.addRange(range); 

Nhưng vấn đề là với range.setStart và range.setEnd của nó không làm việc như tôi mong đợi

+0

@AndyG Tôi đang sử dụng nó trong chức năng app.Remaining IOS của tôi đang hoạt động tốt nhưng vấn đề chỉ với setStart và setEnd cả hai đều không hoạt động –

+1

@AndyG: Sai đường tròn. 'document.createRange()' là chuẩn, được hỗ trợ bởi mọi thứ ngoại trừ IE <= 8. –

+0

Cảm ơn bạn @TimDown. Tôi đã nhìn vào 'selection.createRange'. –

Trả lời

12

Phương thức setStart()setEnd() Phạm vi DOM được xác định rõ, vì vậy bạn có thể tìm câu trả lời bằng cách đọc the spec hoặc MDN.

Để tóm tắt, nếu bạn muốn chỉ định ranh giới phạm vi về chênh lệch ký tự, bạn cần xử lý một nút văn bản thay vì phần tử. Nếu yếu tố bạn có chứa một nút văn bản duy nhất, thay đổi dòng đầu tiên của mã của bạn để những điều sau đây sẽ làm việc:

var node = document.getElementById("content").firstChild; 
+0

Tuyệt vời Nó hoạt động trong trường hợp nếu tôi chỉ có một dòng văn bản trong "nội dung". Còn nếu tôi đã áp dụng thẻ chữ đậm hoặc phông chữ trên chuỗi. –

+1

@ShinningRiver: Sau đó, bạn sẽ cần một giải pháp phức tạp hơn, như http://stackoverflow.com/a/13950376/96100 –

8

Dưới đây là một giải pháp tốt nếu bạn đang cố gắng để lựa chọn một kết quả jquery thiết

var $newSelection = $('.someElements'); 
var selection = window.getSelection(); 
var range = document.createRange(); 
range.setStartBefore($newSelection.first()[0]); 
range.setEndAfter($newSelection.last()[0]); 
selection.removeAllRanges(); 
selection.addRange(range);