代码之家  ›  专栏  ›  技术社区  ›  Drejc

根据像素宽度缩短长文本

  •  2
  • Drejc  · 技术社区  · 17 年前

    我想把很长的描述缩短到可用的表列宽。我有以像素为单位的列宽信息。现在我想将这个度量转换为字符数,这样我就可以将文本缩短为指定的数字。

    我不必100%正确,一个近似的假设也会起作用。

    4 回复  |  直到 17 年前
        1
  •  2
  •   Diodeus - James MacFarlane    17 年前

    将文本包装在DIV中的单元格中。这将告诉您DIV中的文本是否大于单元格:

    <div id='test' style='width:200px;height:100px;overflow:hidden'>
    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse at felis. Etiam ullamcorper. Aenean fringilla, eros eu dapibus tristique, erat lacus vestibulum metus, nec pharetra leo ante et quam. Nunc ac mi molestie justo placerat laoreet. Morbi eget dolor. Curabitur pretium, mi quis iaculis molestie, dolor ligula sagittis orci, at sodales quam dolor quis sem. Suspendisse vitae risus. Maecenas vestibulum dolor vel augue. Sed purus. Ut nisi massa, vestibulum id, lobortis eget, aliquet eu, enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos.</p>
    </div>
    <script type="text/javascript">
    alert($('test').scrollHeight)
    </script>
    

    如果你想在一个单词的末尾截断,并添加省略号(…),你可以在脚本中开始删除单词,直到高度等于或小于容器。(我正在使用 Protoype 对于$shortcut)

    下面是一个工作示例:

    <div id='test' style='width:300px;height:100px;overflow:hidden'>
    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse at felis. Etiam ullamcorper. Aenean fringilla, eros eu dapibus tristique, erat lacus vestibulum metus, nec pharetra leo ante et quam. Nunc ac mi molestie justo placerat laoreet. Morbi eget dolor. Curabitur pretium, mi quis iaculis molestie, dolor ligula sagittis orci, at sodales quam dolor quis sem. Suspendisse vitae risus. Maecenas vestibulum dolor vel augue. Sed purus. Ut nisi massa, vestibulum id, lobortis eget, aliquet eu, enim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos.
    </div>
    <script type="text/javascript">
    function shorten(element) { 
        if($(element).scrollHeight>$(element).getHeight()) {
            var myText = $(element).innerHTML.split(" ")
            myText.length=myText.length-2
            $(element).update(myText.join(" ")+" ...")
            window.setTimeout('shorten("'+element+'")',1)
        }
    
    }
    shorten('test')
    </script>
    

        2
  •  2
  •   Didier Ghys    14 年前

    他所说的CSS属性是“文本溢出”。

    尝试将以下内容添加到元素的类中,所有内容都是必需的:

    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    
        3
  •  1
  •   Edd    15 年前

    我使用的是jQuery1.4.2,前面的答案没有解决问题,但有帮助。。 下面是一些小调整的代码。 请记住,容器需要一个固定的高度和溢出隐藏。

    p#descr1 { height:46px; overflow:hidden; }
    
    <script type="text/javascript">
    
        function shorten(element) {
            if ($(element).attr('scrollHeight') > $(element).height()) {
                var myText = $(element).text().split(" ")
                myText.length = myText.length - 2
                $(element).html(myText.join(" ") + " ...")
                window.setTimeout('shorten("' + element + '")', 1)
            }
        }
    
        $(document).ready(function () {
            shorten('#descr1'); // the id of the container
    
        });
    
    </script>
    
        4
  •  0
  •   Chris Van Opstal    17 年前

    推荐文章