仅显示一个长字符串的10个字符?


84

如何使用JQuery获取长文本字符串(如查询字符串)以最多显示10个字符?

抱歉,我是JavaScript&JQuery的新手:
非常感谢您的帮助。


您可以举个例子澄清一下吗?
安迪E

是jquery,因为它是DOM元素中的字符串吗?
sje397

1
@Gopi是的,我的意思是ellipsize为了澄清...我正在一个Intranet系统上工作,用户可以提出案例...有些用户添加了一个超长查询字符串,当显示在主页上时会破坏表的布局。我想通过检查(使用JQuery)是否包含10个字符且没有空格并将其椭圆化来截取该查询字符串(例如this = is-a-really-long&string ...),请告诉我这是否有意义。谢谢
Nasir

1
它在这里工作成功!
崔安轩(Stan Anh Hien)

浏览器可以自动在字符串中添加省略号,以打破元素的界限(请参阅下面的答案)
Alnitak

Answers:


166

如果我理解正确,您想将字符串限制为10个字符吗?

var str = 'Some very long string';
if(str.length > 10) str = str.substring(0,10);

这样的东西吗?


15
如果语句是可选在这里。 少于10个字符的字符串上的str.substring(0,10)不会受到影响:)
Andy E

10
但是if语句可以用于类似以下的内容:{var str ='Some very long string'; if(str.length> 10)str = str.substring(0,10)+“ ...”; }
Daniel Wedlund 2010年

@Daniel:是的,添加省略号是必要的。幸运的是,我使用了可选单词:-)
Andy E

4
@Daniel,“ if(str.length> 10)str = str.substring(0,10)+“ ...”;}”是错误的,因为结果字符串的长度为13而不是10!正确:“ if(str.length> 10)str = str.substring(0,10-3)+” ...“;}”
Floyd

1
这是针对那些关心者的性能测试。如果实际需要子字符串的情况发生在50%的时间上,它们的性能几乎相同。
Juan Mendes 2015年

22

这是一个jQuery示例:

HTML文本字段:

<input type="text" id="myTextfield" />

jQuery代码以限制其大小:

var elem = $("#myTextfield");
if(elem) elem.val(elem.val().substr(0,10));

例如,您可以使用上面的jQuery代码来限制用户在键入时输入超过10个字符。以下代码段正是这样做的:

$(document).ready(function() {
    var elem = $("#myTextfield");
    if (elem) {
        elem.keydown(function() {
            if (elem.val().length > 10)
                elem.val(elem.val().substr(0, 10));
        });
    }            
});

更新:上面的代码片段仅用于显示用法示例。

以下代码段将解决DIV元素的问题:

$(document).ready(function() {
    var elem = $(".tasks-overflow");
    if(elem){
        if (elem.text().length > 10)
                elem.text(elem.text().substr(0,10))
    }
});

请注意,在这种情况下,我使用text而不是val,因为该val方法似乎不适用于DIV元素。


嗨,Giu,输入文本时我不会处理它,而是显示它并破坏我的表布局时。querystring文本显示在名为.tasks-overflow的DIV中
Nasir 2010年

@Nasir感谢您的提示;我已经更新了答案;它应该可以帮助您解决您的小问题
Giuseppe Accaputo 2010年

嗨,Giu,我已经尝试过您的代码,但没有用。我希望此长字符串'thisisonelooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongongstring显示为'thisisonelooo ...”
Nasir,2010年

代码如下所示:$(document).ready(function(){$(“ .tasks-overflow:contains('http://')”).each(function(){var self = $(this ),txt = self.text(); txt = txt.replace(/(http [s] *:[\ / \] {2})[^ \ s] * / g,'$ 1 ...'); self.text(txt);}); // Giu代码var elem = $(“。tasks-overflow”); if(elem){if(elem.val()。length> 10)elem.val(elem。 val()。substr(0,10))}});
纳西尔

@纳西尔,我很抱歉;我的旧答案包含该val方法,该方法似乎不适用于DIV元素。我再次更新了答案,现在该text方法用于更改文本,该文本应该可以完美地工作(再次在本地进行测试)。您能否使用我更新的代码再次进行测试,并让我知道?
Giuseppe Accaputo

19

创建自己的答案,因为没有人认为拆分可能不会发生(较短的文字)。在这种情况下,我们不想添加“ ...”作为后缀。

三元运算符将解决此问题:

var text = "blahalhahkanhklanlkanhlanlanhak";
var count = 35;

var result = text.slice(0, count) + (text.length > count ? "..." : "");

可以关闭功能:

function fn(text, count){
    return text.slice(0, count) + (text.length > count ? "..." : "");
}

console.log(fn("aognaglkanglnagln", 10));

并扩展到helpers类,这样您甚至可以选择是否要点:

function fn(text, count, insertDots){
    return text.slice(0, count) + (((text.length > count) && insertDots) ? "..." : "");
}

console.log(fn("aognaglkanglnagln", 10, true));
console.log(fn("aognaglkanglnagln", 10, false));

18
var example = "I am too long string";
var result;

// Slice is JS function
result = example.slice(0, 10)+'...'; //if you need dots after the string you can add

结果变量包含“我太...”


10
('very long string'.slice(0,10))+'...'
// "very long ..."

5

html

<p id='longText'>Some very very very very very very very very very very very long string</p>

javascript(已准备好文档)

var longText = $('#longText');
longText.text(longText.text().substr(0, 10));

如果文本中有多个单词,并且希望每个单词最多限制为10个字符,则可以执行以下操作:

var longText = $('#longText');
var text = longText.text();
var regex = /\w{11}\w*/, match;
while(match = regex.exec(text)) {
    text = text.replace(match[0], match[0].substr(0, 10));
}
longText.text(text);

2
仅处理文本时,.text().html()更合适。
安迪E

嗨,sje397,我需要能够忽略此字符串之前和之后的其他单词(此字符串是一个长查询字符串且没有空格),谢谢
Nasir 2010年

@Nasir-您可以将参数更改为substr ...,或者您可能希望查看正则表达式。
sje397

4

将字符串截断为十个字符时,还应该添加实际的html省略号实体:&hellip;,而不是三个句点。


3

在我看来,这更像您可能想要的。

$(document).ready(function(){
var stringWithShorterURLs = getReplacementString($(".tasks-overflow").text());

function getReplacementString(str){
    return str.replace(/(https?\:\/\/[^\s]*)/gi,function(match){
        return match.substring(0,10) + "..."
    });
}});


您在第一行中给它添加html元素,然后它将整个文本带入,用10个字符长的版本替换url,然后将其返回给您。仅具有3个url字符似乎有点奇怪,因此,如果可能的话,我建议您这样做。

$(document).ready(function(){
var stringWithShorterURLs = getReplacementString($(".tasks-overflow p").text());

function getReplacementString(str){
    return str.replace(/https?\:\/\/([^\s]*)/gi,function(match){
        return match.substring(0,10) + "..."
    });
}});

这会删除http://或https://并最多打印10个www.example.com的字符


2

尽管这不会将字符串限制为恰好10个字符,但为什么不让浏览器使用CSS为您完成工作:

.no-overflow {
    white-space: no-wrap;
    text-overflow: ellipsis;
    overflow: hidden;
}

然后为包含字符串的表单元格添加以上类并设置最大允许宽度。结果应该看起来比基于测量字符串长度所做的任何操作都更好。


1

@ jolly.exe

很好的例子,乔利。我更新了您的版本,该版本限制了字符长度,而不是单词数。我还添加了将标题设置为真正的原始innerHTML,以便用户可以将鼠标悬停并查看被截断的内容。

的HTML

<div id="stuff">a reallly really really long titleasdfasdfasdfasdfasdfasdfasdfadsf</div> 

JS

 function cutString(id){    
     var text = document.getElementById(id).innerHTML;         
     var charsToCutTo = 30;
        if(text.length>charsToCutTo){
            var strShort = "";
            for(i = 0; i < charsToCutTo; i++){
                strShort += text[i];
            }
            document.getElementById(id).title = "text";
            document.getElementById(id).innerHTML = strShort + "...";
        }            
     };

cutString('stuff'); 

1

试试这个 :)

var mystring = "How do I get a long text string";
mystring = mystring.substring(0,10);
alert(mystring);

-2

显示此“长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本长文本“

长文本长文本长...

        function cutString(text){    
            var wordsToCut = 5;
            var wordsArray = text.split(" ");
            if(wordsArray.length>wordsToCut){
                var strShort = "";
                for(i = 0; i < wordsToCut; i++){
                    strShort += wordsArray[i] + " ";
                }   
                return strShort+"...";
            }else{
                return text;
            }
         };

您正在考虑这里的单词。问题提到人物
维克多·费尔南德斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.