У меня есть тег <p>, полный текста. При отображении на страницу он отображается в 5 строках. Я хочу, чтобы стиль и расположение тега <div> выделил данную строку, не касаясь тега <p> или его содержимого, предпочтительно используя jQuery.
Таким образом, разметка выглядит
<p>one fish two fish red fish zoo fish fifth fish</p>
И визуализируется выглядит как
одна рыба
две рыбы
Красная рыба
зоопарк
пятая рыба
И я хочу прозрачный красный div поверх линии "красных рыб" 3.
Я ничего не пробовал, и у меня все идеи.
В ответ на вопросы Мэтта Берланда: я должен создать функцию, которая, учитывая элемент P и номер строки, помещает цветную рамку над этой строкой в качестве рендеринга.
P может отображаться как любое количество строк.
Размер окна исправлен, поэтому мне не о чем беспокоиться.
Другие функции зависят от DOM страницы. Я могу вставить тег div, но не больше.
JS
$p = $('p').first();
$pHeight = $p.height()/5;
$pTop = $p.offset().top+(2*$pHeight);
$p.after('<div id="IvetriednothingandImalloutofideas" style="height:'+$pHeight+'px;top:'+$pTop+'px">');
CSS
p {
outline:1px solid #ccc;
width:60px;
}
#IvetriednothingandImalloutofideas {
background-color:rgba(255,0,0,0.2);
width:60px;
position:absolute;
}
id
имя.
Это действительно плохая идея сделать это так. Как сказал другой элемент списка, это правильный способ сделать это. Но если вам нужно сохранить P intact, вы можете установить высоту линии и сделать математику, чтобы поместить div, что бы вы ни хотели в качестве наложения.
CSS:
line-height: 22px;
JS:
var pHeight = $('p').height();
var lineHeight = parseInt($('p').css('line-height'));
var selectedLine = 3;
$('#overlay').css('top', -Math.abs(selectedLine * lineHeight));
Смотрите скрипку: http://jsfiddle.net/JVxdJ/
Если вы не хотите зависеть от форматирования (позиции строк могут меняться и т.д.), И вы не хотите изменять исходный <P>
, вы можете клонировать его - выделить требуемый текст и наложить клонированный на оригинал:
HTML
<p id="text">one fish two fish red fish zoo fish fifth fish</p>
CSS
#text {
width:50px;
}
.highlight {
background-color:red
}
JS
var $text = $('#text');
var match = "red fish";
var $newtext = $text.clone().html($text.html().replace(match, '<span class="highlight">' + match + '</span>'))
$newtext.appendTo('body').offset($text.offset())
Демо: http://jsfiddle.net/j4UfM/1/
Вы можете удалить выделенную копию по мере необходимости.