Javascript 获取文本段落中最后一行的宽度

Javascript 获取文本段落中最后一行的宽度,javascript,jquery,css,Javascript,Jquery,Css,是否有可能以某种方式测量具有多个中断/返回的段落中最后一行文本的长度 Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Donec id elit non mi porta gravida at eget metus. Nulla vitae elit libero, a pharetra augue. Nullam id dolor id nibh

是否有可能以某种方式测量具有多个中断/返回的段落中最后一行文本的长度

          Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
          Donec id elit non mi porta gravida at eget metus. Nulla vitae
          elit libero, a pharetra augue. Nullam id dolor id nibh
          ultricies vehicula ut id elit. Vivamus sagittis lacus vel
[here] ->|augue laoreet rutrum faucibus dolor auctor.|<- [to here]
Morbi leo risus,空调门,爱神前庭。
Donec在eget metus为非mi porta孕妇确定了最佳身份。无生命
精英自由主义者,法雷特拉·奥古斯。Nullam id dolor id nibh
ultricies Vehicleu ut id elit。腔隙矢状窝
[此处]>| augue laoreet rutrum faucibus dolor auctor.|编辑:这是在澄清段落中没有换行之前写的。对不起,不适用

如果您在字符串(即段落)的开头和结尾处修剪空白,然后围绕换行符拆分,并获取结果的最后一个元素,您应该已经接近得到所需的内容了

<div class='input'>
Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
Donec id elit non mi porta gravida at eget metus. Nulla vitae
elit libero, a pharetra augue. Nullam id dolor id nibh
ultricies vehicula ut id elit. Vivamus sagittis lacus vel
augue laoreet rutrum faucibus dolor auctor.
</div>
<div class='result'>
</div>

莫里·利奥·里索斯,圣殿之门,爱神之门的前庭。
Donec在eget metus为非mi porta孕妇确定了最佳身份。无生命
精英自由主义者,法雷特拉·奥古斯。Nullam id dolor id nibh
ultricies Vehicleu ut id elit。腔隙矢状窝
奥古斯·劳里特·鲁图姆·福西布斯·多洛·奥克托。

$('div.result').html(“”)
$('div.input')。每个(函数(){
变量行=$(this).html(
).替换(/^\s+/,“”
).替换(/\s+$/,“”
).split(“\n”)
$('div.result')。追加(“”+
行[lines.length-1]。长度+
“:“+行[lines.length-1]+”

” ) })
试试这个

HTML

<div id="demo">
    Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
    Donec id elit non mi porta gravida at eget metus. Nulla vitae
    elit libero, a pharetra augue. Nullam id dolor id nibh
    ultricies vehicula ut id elit. Vivamus sagittis lacus vel
    augue laoreet rutrum faucibus dolor auctor.
</div>
<p id="text">…text…</p>
例如:

/([^\n\t])/g

这样,您将匹配除制表符和换行符以外的任何内容。我注意到,如果只匹配字母和空格,像素计数可能会有点差。它可能会丢失重要的逗号和其他读取符号。

在字符串的最末端附加一个零宽度元素并测量其左偏移量就足够了

HTML

<div id="demo">
    Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
    Donec id elit non mi porta gravida at eget metus. Nulla vitae
    elit libero, a pharetra augue. Nullam id dolor id nibh
    ultricies vehicula ut id elit. Vivamus sagittis lacus vel
    augue laoreet rutrum faucibus dolor auctor.
</div>
<p id="text">…text…</p>

…文本

JS

$(document).ready(function() {
    var content = $('#demo').html();
    content = content.replace(/(\w|\s)/g, '<span>$1</span>');
    $('#demo').html(content);

    // Check each <span> for its offsetTop
    var highest_top = 0;
    var tmp_top = 0;
    $('#demo span').each(function() {
        tmp_top = $(this)[0].offsetTop;
        if (tmp_top > highest_top) {
            highest_top = tmp_top;
        }
    });

    // Collect total width
    var total_width = 0;
    $('#demo span').each(function() {
        check_top = $(this)[0].offsetTop;
        if (check_top == highest_top) {
            total_width += $(this).width();
        }
    });

    console.log(total_width);
});
// NOTE: This assumes LTR text!
// Using JQuery for simpler code

var $el = $("#text");
var originalText = $el.html();

$el.html(originalText + "<span id='cursor'></span>");
alert($("#cursor").offset().left + "px");
$el.html(originalText);
//注意:这假定为LTR文本!
//使用JQuery获得更简单的代码
var$el=$(“#文本”);
var originalText=$el.html();
$el.html(originalText+“”);
警报($(“#光标”).offset().left+“px”);
$el.html(原始文本);

jsiddle:

也许这会有所帮助:有一种技术可以将字符串克隆到要测量的隐藏内联元素中(就像将输入元素自动调整为其值)。所以,我想关键是这是一段的最后一行。我不清楚文本中是否有手动换行符。这是一行包裹在里面的文本,比如说,一个

标签。噢,很棘手。这要困难得多。并且可能取决于显示特性。对不起,我想不出一个办法。这是一个疯狂的、创造性的、简单的解决方案。我从来没有这样看过,+1这太棒了。还有Duuuuuuuh。非常简单和优雅。我认为使用.position()而不是.offset()更合适,但这一个得到了选中标记!在我的情况下不起作用,因为段落围绕着一个浮动的图像。这真的很聪明!谢谢你,老板!