2012-03-31 31 views
12

Được rồi, tôi đã tìm kiếm trên toàn bộ web để tìm giải pháp nhưng tôi không thể tìm thấy giải pháp, có cách nào để lấy từ trước vị trí dấu mũ trong div có thể chỉnh sửa được không như:JavaScript nhận từ trước con trỏ

This is some| demo texts 

Điều này sẽ trả về từ "một số" ... Tôi không biết nếu điều này là có thể, tôi sẽ rất vui vì được trợ giúp, cảm ơn :).

+0

Bạn có yêu cầu gì về trình duyệt không? Mọi người cũng sẽ muốn biết nếu jquery là ok. – Hemlock

+0

có sử dụng tất cả các ngôn ngữ web bạn muốn, thích hợp hơn tất cả các trình duyệt nhưng chủ yếu là firefox :) –

Trả lời

18

Khi sử dụng phương pháp trình tìm kiếm vị trí được cung cấp, hãy cung cấp here điều này sẽ làm những gì bạn muốn.

function GetCaretPosition(ctrl) { 
     var CaretPos = 0; // IE Support 
     if (document.selection) { 
      ctrl.focus(); 
      var Sel = document.selection.createRange(); 
      Sel.moveStart('character', -ctrl.value.length); 
      CaretPos = Sel.text.length; 
     } 
     // Firefox support 
     else if (ctrl.selectionStart || ctrl.selectionStart == '0') 
      CaretPos = ctrl.selectionStart; 
     return (CaretPos); 
    } 

    function getWordAtPos(s, pos) { 
     var preText = s.substring(0, pos); 
     if (preText.indexOf(" ") > 0 || preText.indexOf("\n") > 0) { 
      var words = preText.split(" "); 
      words = words[words.length - 1].split("\n"); 
      return words[words.length - 1]; //return last word 
     } 
     else { 
      return preText; 
     } 
    } 

    function AlertPrevWord() { 
     var text = document.getElementById("textArea"); 
     var caretPos = GetCaretPosition(text) 
     var word = ReturnWord(text.value, caretPos); 
     if (word != null) { 
      alert(word); 
     } 
    } 

Thực hiện

<input id="textArea" type="text" /> 
<br /> 
<input id="Submit" type="submit" value="Test" onclick="AlertPrevWord()" /> 

http://jsfiddle.net/arrwP/2/

+0

Xin vui lòng tạo một jsfiddle? Vì tôi không biết cách thực hiện điều này thành một vùng văn bản ... –

+0

'textarea' hoặc có thể chỉnh sửa' div'? – Hemlock

+0

Bởi '|' OP có nghĩa là vị trí dấu mũ, không phải là ký tự dòng dọc thực tế có trong chuỗi nguồn. –

9

Dưới đây là một phương pháp thô sử dụng SelectionRange đối tượng.

function getWord() { 
    var range = window.getSelection().getRangeAt(0); 
    if (range.collapsed) { 
     text = range.startContainer.textContent.substring(0, range.startOffset+1); 
     return text.split(/\b/g).pop(); 
    } 
    return ''; 
} 

Bạn có thể thấy nó hoạt động tại đây: http://jsfiddle.net/ggfFw/1/. Điều này sẽ không hoạt động trong IE. Nếu bạn cần xem xét hỗ trợ IE tại thư viện Rangy.

+0

Làm thế nào bạn có thể làm việc này trên một'