正如 tdammers 所提到的,在处理您所建议的内容的过程中处理所有细节可能需要解决许多细微差别,具体取决于您正在做什么。
您尝试做的基本操作是:
- 在要查找其位置的文本周围环绕一个元素,即,在文本的情况下,可能是
<span>。
- 获取您添加的元素的
$.offset() 或$.position()。无论您选择哪个都与您要尝试做的事情相关;第一个与document 相关,第二个与包含元素相关。
我创建了一个简单的脚本演示,以使用divs 和position: absolute 和top/left 在多个段落中“突出显示”键入到文本框中的术语相对于段落中找到的术语的偏移量(由它们周围的<span> 定位)。
注意,这只是一个演示($.offset());它不是生产就绪的代码。在代码 sn-ps 下方有一个现场小提琴演示的链接。
首先,我创建了一个函数来查找并为找到的每个术语创建一个突出显示<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/