2010-11-03 70 views
26

Có cách nào trong jQuery để có được vị trí con trỏ hiện tại trong một đầu vào văn bản mà không làm mã trình duyệt xấu xí cụ thể không?jQuery: Lấy vị trí con trỏ của văn bản trong đầu vào mà không cần mã trình duyệt cụ thể?

Giống như trong:

<input id="myTextInput" type="text" value="some text" > 

con trỏ là sau khi "x" của "một số văn bản", tôi có thể nhận được "8"?

+0

liên quan: http://stackoverflow.com/questions/2897155/get-caret-position-within-an- text-input-field –

+0

Rất tiếc, trường nhập không hiển thị ở đầu. Điều đó nên nói những gì tôi muốn. – Ansgar

Trả lời

32

Bạn không thể làm điều này nếu không có một số mã số cụ thể của trình duyệt, vì chúng triển khai lựa chọn văn bản thay đổi một chút khác nhau. Tuy nhiên, có những plugin trừu tượng hóa điều này. Để biết chính xác những gì bạn đang theo dõi, có jQuery Caret (jCaret) plugin.

You can try out a demo here.

Đối với mã của bạn để có được vị trí bạn có thể làm một cái gì đó như thế này:

$("#myTextInput").bind("keydown keypress mousemove", function() { 
    alert("Current position: " + $(this).caret().start); 
}); 

You can test it here.

+3

Liên kết Jquery Caret này http://plugins.jquery.com/project/jCaret bị lỗi. –

+3

Liên kết đến dự án jCaret tại Google Code [http://code.google.com/p/jcaret](http://code.google.com/p/jcaret) –

+0

@nickcraver Không hoạt động trên mã của tôi. Tôi có cần thêm một nguồn khác như không? –

15

Cảnh báo về plugin Jquery Caret.

Nó sẽ xung đột với Masked Input plugin (hoặc ngược lại). May mắn thay, plugin Masked Input bao gồm một hàm caret() của chính nó, mà bạn có thể sử dụng rất giống với plugin Caret cho các nhu cầu cơ bản của bạn - $ (element) .caret() bắt đầu hoặc .end

+1

Ngoài ra, số jsfiddle trông không chính xác trong trường hợp người ta có thể nhấn các phím xuống/lên. Con trỏ sẽ chuyển sang cuối hộp văn bản nhưng giá trị không đại diện cho các chuyển động đó đến đầu/cuối của đầu vào. – fooledbyprimes

11

Sử dụng cú pháp text_element.selectionStart chúng tôi có thể có được vị trí bắt đầu của việc lựa chọn một văn bản về chỉ số của ký tự đầu tiên của văn bản đã chọn trong text_element.value và trong trường hợp chúng tôi muốn lấy cùng một ký tự cuối cùng trong lựa chọn, chúng tôi phải sử dụng text_element.selectionEnd .

sử dụng nó như sau:

<input type=text id=t1 value=abcd> 
<button onclick="alert(document.getElementById('t1').selectionStart)">check position</button> 

tôi đem đến cho bạn fiddle_demo

+0

Tại sao bạn bận tâm đặt el.value vào var val? Viết tắt như một thuật ngữ rõ ràng để chỉ sử dụng nó một lần dường như chỉ để gây nhầm lẫn mã khác tốt đẹp (tôi đã không chạy nó chưa :) – LeeGee

+0

@LeeGee đúng và do đó giảm mã. –

+2

Giải pháp tuyệt vời! Nó không hoạt động trong IE8, nhưng ai quan tâm! – pmrotule

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