Как упоминает tdammers, обработка всех деталей создания процесса обработки того, что вы предлагаете, имеет много нюансов, которые, возможно, придется учитывать в зависимости от того, что вы делаете.
Основы того, что вы пытаетесь сделать, это:
- Оберните элемент вокруг текста, для которого вы хотите найти позицию, т. Е. В случае текста, вероятно,
<span>
.
- Получите либо
$.offset()
, либо $.position()
добавленного элемента или элементов. Что бы вы ни выбрали, имеет отношение к тому, что вы пытаетесь сделать; первый относится к document
, второй к содержащему его элементу.
Я создал простую демонстрацию скрипта, чтобы «выделить» термин, введенный в текстовое поле в нескольких абзацах, используя div
s со смещениями position: absolute
и top
/ left
относительно терминов, найденных в абзацах (находится рядом с <span>
).
Обратите внимание, это только демонстрация ($.offset()
); это не готовый к использованию код. Под фрагментами кода есть ссылка на демоверсию живой скрипки.
Сначала я создал функцию для поиска и выделения выделения <div>
для каждого найденного термина.
function highlightWordPositions(word) {
var $paras = $('p'),
$spans,
_top = 0,
_left = 0;
$paras.each(function(){
var $p = $(this),
regex = new RegExp(word, 'g');
$p.html($p.text().replace(regex, '<span>' + word + '</span>'));
$spans = $p.find('span');
$spans.each(function(){
var $span = $(this),
$offset = $span.offset(),
$overlay = $('<div class="overlay"/>');
$overlay
.offset($offset)
.css({
width: $span.innerWidth(),
height: $span.innerHeight()
}).show();
$(document.body).append($overlay);
});
});
}
Затем я прикрепил обратный вызов к событию $.keyup()
:
$('#term').keyup(function(event){
var term = this.value;
if (term == '') {
$('.overlay').remove();
return false;
} else if (term.indexOf(' ') != -1) {
this.value = term.replace(' ', '');
return false;
}
$('.overlay').remove();
highlightWordPositions(term);
});
http://jsfiddle.net/JaN75/