通过 JavaScript 检测浏览器换行

2024-06-20

我需要 javascript 来检测每个浏览器包装的文本行并将其包装到<span class="line">.

我读过一些关于测量每个单词的 y 轴的文章,但还没有看到可靠的解决方案。

这是我到目前为止所拥有的。看到它Jsfiddle http://jsfiddle.net/6VqMq/3/.

HTML

<div class="inline-bg">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec cursus condimentum metus, et placerat augue rutrum vitae. Donec arcu lorem, eleifend at elementum eget, consectetur vel lacus. Nam euismod iaculis varius. Phasellus sed dui diam. Nullam facilisis, diam sit amet sagittis cursus, metus tortor gravida erat, ut fringilla risus ipsum eu nisl.</div>​

JS/jQuery

(function($){
    $.fn.inlinebackground = function() {
        $.each(this, function(i,t) {
            var split = $(t).html().split(' ');
            var output = '';
            $.each(split, function(i,o){
                output += '<span class="line">'+o+'</span>';
                if (i < (split.length - 1)) {
                    output += '<br>';
                }
            });
            $(t).html(output);
        });
    }
})(jQuery);

/* End Plugin Code */

// Run the plugin on .news-caption 
$(function(){
    $('.inline-bg').inlinebackground();
});

CSS

.inline-bg { width: 200px; line-height:3em; }
.inline-bg span.line { background-color: black; color: white; padding: 15px; }


我必须承认,一开始我认为这将是一项艰巨的任务,因为任务浏览器无法告诉您自动换行符发生在哪里。

我创建了一个解决方案,首先将每个单词包装在一个跨度中,然后遍历所有跨度以确定它们在容器中的顶部位置。然后,它构建行开始和结束跨度的索引数组,并将每行字跨度包装在包装跨度中。

DEMO: http://jsfiddle.net/KVepp/2/ http://jsfiddle.net/KVepp/2/

可能的限制:

  • 在每个跨度末尾添加的空格可能会导致跨度中断 文本可能没有的新行。
  • 不确定换行后是否需要删除每个单词跨度。 (非常简单的模组)
  • 假设容器中除了文本之外没有其他 html
  • 如果需要的话,需要一些额外的工作才能变成插件 对于多个容器
  • 单词的正则表达式是在空间上进行简单的分割。可能需要额外 重复空格的正则表达式

HTML:

<div id="content">Lorem Ipsum<div> 

CSS:

#content{ position:relative}

JS:

var $cont = $('#content')

var text_arr = $cont.text().split(' ');

for (i = 0; i < text_arr.length; i++) {
    text_arr[i] = '<span>' + text_arr[i] + ' </span>';
}

$cont.html(text_arr.join(''));

$wordSpans = $cont.find('span');

var lineArray = [],
    lineIndex = 0,
    lineStart = true,
    lineEnd = false

$wordSpans.each(function(idx) {
    var pos = $(this).position();
    var top = pos.top;

    if (lineStart) {
        lineArray[lineIndex] = [idx];
        lineStart = false;

    } else {
        var $next = $(this).next();

        if ($next.length) {
            if ($next.position().top > top) {
                lineArray[lineIndex].push(idx);
                lineIndex++;
                lineStart = true
            }
        } else {
            lineArray[lineIndex].push(idx);
        }
    }

});

for (i = 0; i < lineArray.length; i++) {
var start = lineArray[i][0],
    end = lineArray[i][1] + 1;

/* no end value pushed to array if only one word last line*/
if (!end) {
    $wordSpans.eq(start).wrap('<span class="line_wrap">')
} else {
    $wordSpans.slice(start, end).wrapAll('<span class="line_wrap">');
}

}​

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 JavaScript 检测浏览器换行 的相关文章

随机推荐

  • C# CA2000:使用 FileStream/XmlTextReader 在失去范围之前释放对象

    我有很多这样的代码 FileStream fs File Open C Temp SNB RSS xml FileMode Open using XmlTextReader reader new XmlTextReader fs Some
  • div 在显示内的定位:IE 10 中的表格单元格

    试图理解为什么 IE9 10 会因为 IE7 8 FF WK 都按预期渲染的内容而感到窒息 有什么技巧可以让 IE 9 10 正确尊重 表格单元格 的固有高度 重要提示 由于多种原因 我无法在 单元格 div 上使用 height 100
  • 单词之间没有空格的语言(例如亚洲语言)中的断词?

    我想让 MySQL 全文搜索适用于日语和中文文本以及任何其他语言 问题在于这些语言以及可能其他语言通常在单词之间没有空格 当您必须键入与文本中相同的句子时 搜索没有用 我不能只在每个字符之间添加空格 因为英语也必须有效 我想用 PHP 或
  • 两个 Div 之间的固定宽度间隙

    有谁知道如何修复两个 div 之间的间隙 我有一个主要内容 Div 里面有两个带有图片的 Div 视图的宽度为 768 像素 当我开始拉伸视图时 两张图片开始相互远离 但理想情况下 主要内容 Div 应该在周围有空白的情况下拉伸 并且图片之
  • Angular 2 中的变更检测

    我正在将角度 1 和角度 2 集成在一起 因此我有角度 1 控制器和服务以及角度 2 组件 这些对于数据检索和存储来说工作得很好 反之亦然 下面是我的 html 页面 h3 Angular 1 service h3 div div
  • 错误 com.sap.xs2.security.commons.SAPOfflineTokenServices - 加载 JWT 库时出错

    根据你的Answer https stackoverflow com questions 53343556 invalid bean definition with name offlinetokenservices defined in
  • 如何在报表查看器中添加参数?

    嘿 我在 Visual Studio 2010 中有一个表单应用程序 我想使用报表查看器创建一个报表并添加一些参数 我尝试从代码中添加参数 但没有成功 我有这个错误 tablix Tablix1 的 FilterExpression 表达式
  • .showsPhysics 内存泄漏

    我最近花了 5 个小时尝试调试 Spritekit 应用程序中的内存泄漏 应用程序启动后 我注意到内存使用量略有上升 我花了 5 个小时中的 3 个小时挖掘参考资料 了解强与弱的关系ARC https developer apple com
  • 使用 javax.sound.midi 接收 MIDI 输入

    我想要一个程序 当它获得 MIDI 输入时可以做一些事情 例如 当我单击控制器上的按钮 1 时 它应该打印 您单击了 btn 1 当我单击按钮 2 时 它应该打印 您单击了 btn 2 我尝试使用 javax sound midi 库 但论
  • 如何在 64 位中构建 Boost 1.64?

    我运行的是 Windows 10 并在我的笔记本电脑上安装了 Visual Studio 2017 Community Edition 我有一些旧程序在 64 位 Boost 1 62 0 的 VS 2015 中编译得很好 由于一些非常奇怪
  • SWT 表:如何设置/获取“焦点”行

    On Windows and Linux when holding down the Ctrl key one can move up and down using the caret keys without changing the s
  • 使用 Spring AOP 记录方法条目[重复]

    这个问题在这里已经有答案了 任何人都知道如何在跟踪级别使用 Spring AOP 和 log4j 记录方法条目 包括参数值 并退出 它应该能够记录多个包中的类 您可以使用 大约 用于此类目的的方面 Component Aspect Orde
  • 图像处理以提高 tesseract OCR 准确性

    我一直在使用 tesseract 将文档转换为文本 文档的质量参差不齐 我正在寻找有关哪种图像处理可以改善结果的提示 我注意到高度像素化的文本 例如由传真机生成的文本 对于超正方体来说尤其难以处理 大概所有这些字符的锯齿状边缘都会混淆形状识
  • 不使用 BuildContext 预加载图像

    有没有办法在函数中加载 Flutter 中的图像而无需访问 BuildContext Flutter 可以预加载图像precacheImage 需要BuildContext 使用起来不方便 我想加载图像initState StatefulW
  • PhoneGap for Windows Phone - 文件扩展名“.js”没有脚本引擎

    我使用 Microsoft Visual Studio 创建了新项目 但出现编译错误 如下所示 文件扩展名 js 没有脚本引擎 命令 CScript c users raja documents visual studio 2010 Pro
  • 我应该对 ObjectContext 使用 using 关键字吗?

    我在这个网站或 CodeProject 的某个地方读到 好的规则是 如果某个类已经实现了 IDisposable 接口 那么您应该使用 using 关键字 因为使用翻译成 MSIL 的关键字会尝试 最终阻止如下内容 try some log
  • 使用 Libgdx 更新适用于 64 位设备的 Android 应用程序

    我在 Google Play 上有一些 Android 应用程序 我只需要根据谷歌最近提到的以下要求更新应用程序 即 所有应用程序都必须与 64 位兼容 https android developers googleblog com 201
  • 相对文件路径的区别:Qt Creator的调试模式和发布模式

    QFile file test txt if file open QIODevice ReadOnly qDebug lt lt You got me 我在用 Qt 4 8 6 与 MSVC 2010 Qt 创建者 3 1 1 Window
  • 函数模板在另一个类/命名空间中的专业化?

    注意 这个问题与tinyxml只是松散相关 但是包括这样的细节可能有助于更好地说明这个概念 我编写了一个函数模板 它将迭代父 XML 节点子节点 检索子元素的值 然后将该子元素值推送到向量 检索值 部分也写为函数模板 i e templat
  • 通过 JavaScript 检测浏览器换行

    我需要 javascript 来检测每个浏览器包装的文本行并将其包装到 span class line 我读过一些关于测量每个单词的 y 轴的文章 但还没有看到可靠的解决方案 这是我到目前为止所拥有的 看到它Jsfiddle http js