私は解決策を見つけるためにウェブ全体を見てきましたが、見つけられませんでした。編集可能なdivのキャレット位置の前に単語を取得する方法があります以下のような:JavaScriptの前にカーソルを置く
This is some| demo texts
これは、単語「一部」が...これが可能である場合、私は知らない、私は任意のヘルプ、感謝:)のために喜んでいるだろうを返す必要があります。
私は解決策を見つけるためにウェブ全体を見てきましたが、見つけられませんでした。編集可能なdivのキャレット位置の前に単語を取得する方法があります以下のような:JavaScriptの前にカーソルを置く
This is some| demo texts
これは、単語「一部」が...これが可能である場合、私は知らない、私は任意のヘルプ、感謝:)のために喜んでいるだろうを返す必要があります。
キャレットポジションファインダーメソッドを使用すると、hereが提供します。ここ
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);
}
}
実装
<input id="textArea" type="text" />
<br />
<input id="Submit" type="submit" value="Test" onclick="AlertPrevWord()" />
jsfiddleを作ってください。私はこれをテキストエリアに実装する方法を知らないので... –
'textarea'または編集可能な' div'ですか? – Hemlock
'| 'によって、OPは、ソース文字列に存在する実際の垂直ライン文字ではなく、キャレット位置を意味します。 –
Selection
とRange
オブジェクトを使用して粗い方法です。 http://jsfiddle.net/ggfFw/1/:
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 '';
}
現在のアクションでそれを見ることができます。 これはIEでは動作しません。 IEのサポートが必要な場合は、Rangyライブラリを参照してください。
これを '
私は、https://stackoverflow.com/a/9960262/986160のようなものを持っていましたが、私のChromeブラウザでは選択できませんでした。私の他の答えはここに基づいて:https://stackoverflow.com/a/26728677/986160 - それに応じて変更されました:
function getLastWordBeforeCaret() {
const containerEl = document.getElementById('element-id');
let preceding = '';
let sel;
let range;
if (window.getSelection) {
sel = window.getSelection();
if (sel && sel.rangeCount > 0) {
range = sel.getRangeAt(0).cloneRange();
range.collapse(true);
range.setStart(containerEl, 0);
preceding = range.toString();
}
}
let queryMatch = preceding.match(/([^\s]+)$/i);
if (queryMatch) {
return queryMatch[1];
} else {
return '';
}
}
ブラウザの条件はありますか?人々はまた、jqueryがOKであるかどうかを知りたいと思うでしょう。 – Hemlock
はい、すべてのブラウザが好きですが、主にFirefoxを使用したい、すべてのWeb言語を使用してください:) –