Wie tdammers erwähnt, gibt es bei der Ausarbeitung eines Prozesses für das, was Sie vorschlagen, viele Nuancen, die je nach dem, was Sie tun, berücksichtigt werden müssen.
Die Grundlagen dessen, was Sie zu tun versuchen, sind:
- Wickeln Sie ein Element um den Text, für den Sie die Position finden wollen, d. h. im Falle von Text wahrscheinlich ein
<span>
.
- Holen Sie sich entweder die
$.offset()
o $.position()
des Elements oder der Elemente, die Sie hinzugefügt haben. Welche Sie auch immer wählen, ist relevant für das, was Sie zu tun versuchen; die erste ist relevant für die document
, das zweite auf das enthaltende Element.
Ich habe eine einfache Demo eines Skripts erstellt, das einen in ein Textfeld eingegebenen Begriff in mehreren Absätzen "hervorhebt", indem es div
s mit position: absolute
et top
/ left
die Verrechnung mit den Begriffen in den Paragraphen (zu finden über die <span>
um sie herum).
Beachten Sie, dass dies nur eine Demonstration ist (von $.offset()
); es ist kein produktionsreifer Code. Unter den Codeschnipseln befindet sich ein Link zur Live-Demo des Fiddles.
Zunächst habe ich eine Funktion zum Suchen und Erstellen einer Markierung erstellt <div>
für jeden gefundenen Begriff.
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);
});
});
}
Dann habe ich einen Rückruf an die $.keyup()
Veranstaltung:
$('#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/