Javascript 在n个字符后剪切一个字符串,但如果是';在词的中间切掉整个单词
我正在尝试制作一个JS函数,它可以在n个字符后剪切一个字符串——这很有效。问题是,如果它在一个词的中间,它看起来不好,所以我需要你的帮助,使它切断整个单词,如果它的中间。< /P> 到目前为止,我的代码是:Javascript 在n个字符后剪切一个字符串,但如果是';在词的中间切掉整个单词,javascript,jquery,character,truncate,Javascript,Jquery,Character,Truncate,我正在尝试制作一个JS函数,它可以在n个字符后剪切一个字符串——这很有效。问题是,如果它在一个词的中间,它看起来不好,所以我需要你的帮助,使它切断整个单词,如果它的中间。< /P> 到目前为止,我的代码是: if($('#desc').text().length > 505){ str = $("#desc").text(); $('#desc').text(str.substring(0, 505)).append('...'); } 附言 #desc是包含我的字符串的div
if($('#desc').text().length > 505){
str = $("#desc").text();
$('#desc').text(str.substring(0, 505)).append('...');
}
附言
- #desc是包含我的字符串的div
- 您可以使用jQuery
这是一个测试字符和你认为是单词分隔符的方法的组合。我将使用一个:
function splitString(str, index) {
var delim = /\s|[,\.]/; // Put any other character you consider
// a non-word char in the brackets.
// The initial \s is any whitespace, so
// space, tab, newline, etc.
var ch;
var i;
// Loop until we find a matching delimiter or we run out of string
for (i = index;
i >= 0 && !delim.test(str.charAt(i));
--i) {
// No body
}
if (i < 0) {
// No break before, split word in middle
return index;
}
return i + 1;
}
函数拆分字符串(str,index){
VaR Delm=/\s[],[.] / / /放置你考虑的任何其他字符
//括号中的非单词字符。
//首字母\s是任何空格,因此
//空格、制表符、换行符等。
var-ch;
var i;
//循环,直到找到匹配的分隔符或字符串用完为止
for(i=指数;
i>=0&!delim.test(str.charAt(i));
--(一){
//没有人
}
if(i<0){
//前无中断,中间分词
收益指数;
}
返回i+1;
}
|使用lastIndexOf方法可以找到字符串中的最后一个空格字符 通过第二个参数设置一个上限
var cutat= string.lastIndexOf(' ',505);
if(cutat!=-1)string=string.substring(0,cutat)+'...';
//else the string is shorter than 505 (or has no spaces...)
这个简单的功能在任何情况下都可以使用,如果需要,还可以添加3个点:
function shortenString(source_string, max_length) {
var short = source_string.substr(0, max_length);
if (/^\S/.test(source_string.substr(max_length)))
return short.replace(/\s+\S*$/, "") + '...';
return short;
};
例如:
var title = "This function will work in any situation";
var short = shortenString(title, 30);
var texte=`Lorem ipsum door sit amet,concetetur adipsicing elit。在justo bibendum accumsan的Nunc eu magna。阿利奎姆·奎姆·梅特斯,亨德雷特·埃吉特·康莫多,萨吉蒂·欧莱克图斯。努克·奎斯·普鲁斯·乌尔纳。二联醇沉法测定了二联醇沉法测定的二联醇沉法测定的二联醇沉法测定的二联醇沉法测定的二联醇沉法测定的二联醇沉法测定的二联醇沉法测定的二联醇沉法测定的二联醇沉法测定的二联醇沉法测定的二联醇沉法测定结果。我是洛雷姆·法雷特拉·康莫多。尤伊斯莫·康莫多·埃利芬德馆长。阿利奎特·马萨·普罗因·波特提托。暂时性生命相。Donec venenatis ligula dui,位于设施区。这是一种非常有效的方法。埃拉特·普卢斯的奎斯克。但是,我们的同侧不能有最大的软体动物。我的未来万岁,我的未来万岁;
函数剪切(n,文本){
如果(n0){
n--;
}
返回text.substr(0,n);
}否则{
返回文本;
}
}
document.getElementById(“结果”).innerHTML=cut(5,texte)代码>
感谢您的回答,但不幸的是它不工作,为什么for循环为空?for循环必须是for(;”,.indexOf(text[n])!==0;n--)代码>。目前它是一个无止境的循环。@GodLesZ,你的循环和我的相同,唯一的区别是语法上的糖分,无论你是使用“;”还是“{}”。只使用“;”是一种不好的做法,尤其是在同一行中,因为很容易错误地“读取”下一行在循环中,这就是为什么我习惯使用“{}”和两行。@Gavriel奇怪,我可以发誓循环头是不同的,导致了一个无休止的循环。。不管怎样,现在是对的,我想!谢谢,但是我不知道字数,我只想要字符数。String.lastIndexOf()的第二个参数是开始搜索的索引,而不是上限。同一个源状态:从索引参数开始向后搜索调用字符串。@kennebec是对的!方向是向后的,因此lastIndexOf
最适合该作业。要澄清:var longString=“没有那么长,但仍需要切割”代码>console.log(longString.length,longString.lastIndexOf('',15))
//打印37 13
另请参见相关副本:。我必须缺少某些内容,因为这对我不起作用。根据我的经验,如果只是删除结果中的最后一个单词。如果最后一个单词是“current”,并且长度在“cur”处截断,则删除“cur”。但是,如果长度在完整单词“current”处截断,且结尾没有空格,则仍会删除整个单词。@jkupczak在您的示例中,单词“current”后面是什么?你能提供一个完整的示例调用(作为代码)来显示意外的结果吗?对不起,我算错了!这实际上效果很好。
function shortenString(source_string, max_length) {
var short = source_string.substr(0, max_length);
if (/^\S/.test(source_string.substr(max_length)))
return short.replace(/\s+\S*$/, "") + '...';
return short;
};
var title = "This function will work in any situation";
var short = shortenString(title, 30);