2015-11-05 3 views
3

Интересно, есть ли способ выбрать одно слово в HTML, указав координату экрана (x, y). В принципе, я хотел бы иметь настраиваемый window.getSelection, но вместо запуска с помощью курсора (или касания) точкой ввода (x, y) будет вход. Благодарю.выберите одно слово в координате экрана (x, y) в html

+1

Вы можете использовать функцию .offset(). http://api.jquery.com/offset/ – DinoMyte

+0

@ Anonymous0day, elementFromPoint() только дает мне весь элемент, а не конкретное слово. – Jay

+0

oups вы правы! – Anonymous0day

ответ

0

Один BASIC решение может быть что-то вроде этого:
(обнаружение слова основаны на одном пространстве «» строго)!
Только для демонстрационных целей, символы кодирования и не алфавиты здесь выходят за рамки!

var $j = function(val, space) {return JSON.stringify(val, '', space || '');}; 
 
var $l = function(val) {document.body.insertAdjacentHTML('beforeend', '<div><pre>' + val + '</pre></div>')}; 
 
$lj = function(val, space) {$l($j(val, space));}; 
 

 

 

 

 

 
function getWordAtPosition(x,y){ 
 
    var caretPosition = document.caretPositionFromPoint(x , y); 
 

 
    var str = caretPosition.offsetNode.data; 
 
    var len = caretPosition.offsetNode.length; 
 
    var pos = caretPosition.offset; 
 
    
 
    var result = { 
 
    function: 'getWordAtPosition(' + x + ' , ' + y + ')' , 
 
    x  : x , 
 
    y  : y , 
 
    data : str , 
 
    startAt : pos , 
 
    endAt : pos , 
 
    curChar : str[pos] , 
 
    }; 
 
    
 
    
 
    
 
    if(!result.curChar) return result; 
 
    if(result.curChar === " ") return result; 
 
    
 
    
 
    while(pos>=0 && str[pos]!==' ') pos--; 
 
    result.startAt = pos+1; 
 
    
 
    var endAt = str.indexOf(' ' , result.startAt); 
 
    endAt = endAt === -1 || endAt === result.startAt ? len-1 : endAt-1; 
 
    result.endAt = endAt; 
 
    
 
    result.word = str.substring(result.startAt , result.endAt+1); 
 
    
 
    $lj(result , ' '); 
 
} 
 

 

 

 
document.onclick = function(evt) { 
 
    
 
    getWordAtPosition(evt.clientX, evt.clientY); 
 

 
};
Click anywhere in this document. 
 
<div> 
 
    <p>Testing my code here</p> 
 
</div>

+0

Спасибо Anonymous0day. Оцените свой ответ, но нужно ли привязать к событию caretPositionFromPoint (или elementFromPoint())? – Jay

+0

не обязательно! см. мой пример, я просто получаю координаты указателя от события, и я передаю их функции! вы можете использовать функцию без события, на выходе я добавил функцию, которую нужно вызвать с координатой, если вы попробуете ее в своем отладчике, вы получите тот же результат без события – Anonymous0day

+0

, если вы используете мой тестовый пример, вы можете позвонить функция, чтобы получить слово «где угодно», используя 'getWordAtPosition (98, 15);' без какого-либо события – Anonymous0day

Смежные вопросы