我有一個contenteditable div
,我需要知道當前插入符號處的單詞。我試過this solution,但問題是,它不識別特殊字符,如@
和~
。所以,如果一個詞開始~
,如~fool
,我得到fool
,而我預計~fool
。所以我試圖修改解決方案,考慮到如果將選擇移回後,遇到的角色不是空格,我會繼續向後移動,直到遇到空格。這將使選擇的開始。同樣,我會繼續前進直到找到空間,這將標誌着選擇的結束。然後選擇會給我這個詞。爲了得到插入位置,我使用了this solution。結合起來,我的代碼現在看起來像這樣:在contenteditable div中獲取以特殊字符開頭的單詞在插入符號處的詞
function getCaretPosition(editableDiv) {
var caretPos = 0,
sel, range;
if (window.getSelection) {
sel = window.getSelection();
if (sel.rangeCount) {
range = sel.getRangeAt(0);
if (range.commonAncestorContainer.parentNode == editableDiv) {
caretPos = range.endOffset;
}
}
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
if (range.parentElement() == editableDiv) {
var tempEl = document.createElement("span");
editableDiv.insertBefore(tempEl, editableDiv.firstChild);
var tempRange = range.duplicate();
tempRange.moveToElementText(tempEl);
tempRange.setEndPoint("EndToEnd", range);
caretPos = tempRange.text.length;
}
}
return caretPos;
}
function getCurrentWord() {
var sel, word = "";
if (window.getSelection && (sel = window.getSelection()).modify) {
var selectedRange = sel.getRangeAt(0);
sel.collapseToStart();
sel.modify("move", "backward", "word");
while (sel.toString() != " " && getCaretPosition($("#editor").get(0)) != 0) {
sel.modify("move", "backward", "character");
(sel = window.getSelection()).modify;
}
sel.modify("move", "forward", "character");
sel.modify("extend", "forward", "word");
word = sel.toString();
// Restore selection
sel.removeAllRanges();
sel.addRange(selectedRange);
} else if ((sel = document.selection) && sel.type != "Control") {
var range = sel.createRange();
range.collapse(true);
range.expand("word");
word = range.text;
}
return word;
}
$(function() {
$(document).on('keyup keydown paste cut mouseup',"#editor", function() {
var word = getCurrentWord();
console.log(word);
});
});
但是,這根本不起作用。這是問題沒有。 1.問題2是,即使圖片中有圖像,用戶點擊圖片,圖片處理程序不斷返回最後一個圖片,但我期待空白字符串。任何人都可以幫我解決這兩個問題嗎?
我不想成爲那個人,但它聽起來像2個回答你有你需要放在一起工作解決方案爲您的需要的一切之間。你不必標記任何一個答案是對的,只是認爲你有足夠的解決方案來爲自己工作:P –
我也在自己嘗試一些東西,我不是懶洋洋地坐在別人的工作解決方案上。 – SexyBeast
我的歉意,我並沒有打算暗示你是懶惰的。只是意味着這兩個答案之間我認爲答案是潛伏的。 –