在新的一行包装文字

时间:2013-04-22 06:54:49

标签: javascript jquery

我正在使用以下代码包装文本区域中的用户输入的长文本以进行评论:

function addNewlines(comments) {
  var result = '';
  while ($.trim(comments).length > 0) {

    result += comments.substring(0,70) + '\n';
    comments = comments.substring(70);
  }
  return result;
}

问题显示在下面的屏幕截图中。关于如何解决它的任何想法?我们可以使用lastindexof(" ")方法获取子字符串中的最后一个空格来逻辑地解决这个问题吗?任何人都可以调整这个小代码来使其正确吗?

scrn shot of output

8 个答案:

答案 0 :(得分:1)

尝试以下方法之一:

  1. word-wrap:no-wrap;
  2. word-wrap: break-word
  3. 它可能会解决您的问题

答案 1 :(得分:1)

在CSS中尝试word-wrap: break-word 浏览器(甚至是IE 5.5+)也很好地支持word-wrap属性 更多信息:https://developer.mozilla.org/en-US/docs/CSS/word-wrap
示例用法:FIDDLE

答案 2 :(得分:1)

我认为通过CSS包装文本是一个更好的解决方案,但是这里有一个可能有用的链接wrap-text-in-javascript

顺便说一下,我记得有一个JQuery插件用于包装文本google它。

答案 3 :(得分:1)

上述仅在99%的时间内起作用。这是唯一一个100%适合我的方式: http://locutus.io/php/strings/wordwrap/

答案 4 :(得分:0)

您只需在文本区域应用一些css,如

style="word-wrap: break-word;" 

答案 5 :(得分:0)

我使用这个css代码在Torch浏览器中显示它可以正常工作

我已尝试word-wrap:break-word;overflow:ellipsis; ....等,但没有效果。

#xxx{

 width: 750px;
 word-break: break-word;

}

答案 6 :(得分:0)

在使用正则表达式和其他实现寻找完美的解决方案之后。我决定改正自己。它并不完美,但对我的情况很有用,也许当你的所有文字都是大写字母时,它可能无法正常工作。



function breakTextNicely(text, limit, breakpoints) {

  var parts = text.split(' ');
  var lines = [];
  text = parts[0];
  parts.shift();

  while (parts.length > 0) {
    var newText = `${text} ${parts[0]}`;

    if (newText.length > limit) {
      lines.push(`${text}\n`);
      breakpoints--;

      if (breakpoints === 0) {
        lines.push(parts.join(' '));
        break;
      } else {
      	text = parts[0];
	  }
    } else {
      text = newText;
    }
	  parts.shift();
  }

  if (lines.length === 0) {
    return text;
  } else {
    return lines.join('');
  }
}

var mytext = 'this is my long text that you can break into multiple line sizes';
console.log( breakTextNicely(mytext, 20, 3) );




答案 7 :(得分:0)

我有同样的问题,我使用以下功能解决了它。

function wordWrap(message, lineSize, breakPoint){
    let wordsArr = message.split(" "),
        wordsLen = wordsArr.length,
        finalMsg = "",
        linesArr = [""],
        currLine = 0;

    for(let i=0; i< wordsLen; i++){
        if(linesArr[currLine].length + wordsArr[i].length > lineSize){
            currLine +=1;
            linesArr[currLine] = wordsArr[i] + " ";
        } else {
            linesArr[currLine] += wordsArr[i] + " ";
        }
    }
    let linesLen = linesArr.length;
    for(let i=0; i<linesLen; i++){
        finalMsg += linesArr[i] + breakPoint;
    }
    return finalMsg.trim();
}

希望这有帮助。