我有一個div,其contenteditable屬性設置爲true。當用戶鍵入'#'
或'@'
,我想得到任何他/她鍵入直到按下空格鍵。這樣,我可以根據他/她可能輸入的單詞,從db中提出建議。
請看看下面的例子,如何收集在#或@旁邊輸入的字符/單詞div
<div id="editableDiv" contenteditable="true">
I may tweet from @twitter in the near #future
<ul id="suggestUL"></ul>
</div>
只要用戶類型'@'
或'#'
,我必須能夠收集無論他/她可以輸入(根據上面的例子中,後@t
, tw
,twi
,twit
,twitt
,twitte
和twitter
。而經過#f
,fu
... future
)。 'twitter'
後,用戶鍵入空格鍵這樣,詞集必須停止,必須從#
重新開始。
編輯
代碼來獲得在那裏我可以顯示建議列表像素
function getCaretPixelPos($node) {
var offsetx = 0;
var offsety = 0;
var nodeLeft = 0,
nodeTop = 0;
if ($node) {
nodeLeft = $node.offsetLeft;
nodeTop = $node.offsetTop;
}
var pos = { left: 0, top: 0 };
if (document.selection) {
var range = document.selection.createRange();
pos.left = range.offsetLeft + offsetx - nodeLeft + 'px';
pos.top = range.offsetTop + offsety - nodeTop + 'px';
} else if (window.getSelection) {
var sel = window.getSelection();
var range = sel.getRangeAt(0).cloneRange();
try {
range.setStart(range.startContainer, range.startOffset - 1);
} catch (e) { }
var rect = range.getBoundingClientRect();
if (range.endOffset == 0 || range.toString() === '') {
// first char of line
if (range.startContainer == $node) {
// empty div
if (range.endOffset == 0) {
pos.top = '0px';
pos.left = '0px';
} else {
// firefox need this
var range2 = range.cloneRange();
range2.setStart(range2.startContainer, 0);
var rect2 = range2.getBoundingClientRect();
pos.left = rect2.left + offsetx - nodeLeft + 'px';
pos.top = rect2.top + rect2.height + offsety - nodeTop + 'px';
}
} else {
pos.top = range.startContainer.offsetTop + 'px';
pos.left = range.startContainer.offsetLeft + 'px';
}
} else {
pos.left = rect.left + rect.width + offsetx - nodeLeft + 'px';
pos.top = rect.top + offsety - nodeTop + 'px';
}
}
//console.log('pos left : ' + pos.left + ' pos top : ' + pos.top);
//console.log($('#suggestUL'));
$('#suggestUL').css('left', pos.left);
$('#suggestUL').css('top', pos.top);
//console.log('suggestUL left : ' + $('#suggestUL').css('left') + ' suggestUL top : ' + $('#suggestUL').css('top'));
};
這是我如何調用上面的函數
var event = e || window.event;
var keyCode = event.keyCode || event.which;
if (keyCode == 35 || keyCode == 64)
getCaretPixelPos($('#editableDiv')[0]);
PS:我不知道爲什麼我被標題罰款-2。無論如何,我編輯標題更清晰。我是學習者,如果我在選擇標題或提問時出現任何錯誤,請提出建議。
在此先感謝。
你試過的也表明過。 –
看正則表達式... –
^是。如果你還沒有嘗試過任何東西,[輸入HTML5事件](https://developer.mozilla.org/en-US/docs/Web/Reference/Events/input?redirectlocale=en-US&redirectslug=DOM%2FMozilla_event_reference% 2Finput)和/或只是常規的[keyboardevent](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent)應該讓你開始 –