Как поставить div над определенной строкой ap?

0

У меня есть тег <p>, полный текста. При отображении на страницу он отображается в 5 строках. Я хочу, чтобы стиль и расположение тега <div> выделил данную строку, не касаясь тега <p> или его содержимого, предпочтительно используя jQuery.

Таким образом, разметка выглядит

<p>one fish two fish red fish zoo fish fifth fish</p>

И визуализируется выглядит как

одна рыба
две рыбы
Красная рыба
зоопарк
пятая рыба

И я хочу прозрачный красный div поверх линии "красных рыб" 3.

Я ничего не пробовал, и у меня все идеи.

В ответ на вопросы Мэтта Берланда: я должен создать функцию, которая, учитывая элемент P и номер строки, помещает цветную рамку над этой строкой в качестве рендеринга.

P может отображаться как любое количество строк.

Размер окна исправлен, поэтому мне не о чем беспокоиться.

Другие функции зависят от DOM страницы. Я могу вставить тег div, но не больше.

  • 0
    Вы что-нибудь пробовали, но можете ли вы предоставить демоверсию jsfiddle?
  • 0
    В общем, это просто не та вещь, которую система рендеринга HTML / CSS позволяет легко делать.
Показать ещё 11 комментариев

3 ответа

3

DEMO

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;
}
  • 5
    1+ Отлично id имя.
  • 0
    Это похоже на то, что мне нужно, но есть ли способ определить количество строк, отображаемых p для части "/ 5"?
0

Это действительно плохая идея сделать это так. Как сказал другой элемент списка, это правильный способ сделать это. Но если вам нужно сохранить 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/

  • 0
    Я думаю, что-то неправильно отформатировано в вашем третьем предложении.
  • 0
    Да, редактор немного переформатировал мой текст. Спасибо!
0

Если вы не хотите зависеть от форматирования (позиции строк могут меняться и т.д.), И вы не хотите изменять исходный <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/

Вы можете удалить выделенную копию по мере необходимости.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню