DDK
DDK

Reputation: 1038

Display only whole word using javascript

I have a text say "A sample text for testing". I need to display only ten characters in a div. so i do substring on the text

txt.substring(0,10) 

This gives me "A sample t". Since its ugly to display a unterminated word, i need only to display "A Sample" to be displayed. How do i do this?

Upvotes: 1

Views: 1375

Answers (4)

Matthew Robinson
Matthew Robinson

Reputation: 91

function getShortenedString(str)
{
    var maxLength = 10; // whatever the max string can be
    var strLength = str.length;
    var shortenedStr = str.substr(0, maxLength);
    var shortenedStrLength = shortenedStr.length;
    var lastSpace = str.lastIndexOf(" ");

    if(shortenedStrLength != strLength) 
    {
        // only need to do manipulation if we have a shortened name
       var strDiff = strLength - shortenedStrLength;
       var lastSpaceDiff = shortenedStrLength - lastSpace;

       if(strDiff > lastSpaceDiff) // non-whole word after space
       { 
           shortenedStr = str.substr(0, lastSpace);
       }

    }

    return shortenedStr;
 }

Upvotes: 0

tiran
tiran

Reputation: 2431

use substring method to do this i think you should add a filter to check whether the 11th character is space or not with the substring method. otherwise the last valid word too might removed. get "New sample text for testing" for example.

this is the code.

str = "A sample text for testing"
ch11_space = (str[10] == ' ') ? 0 : 1;
str = str.substring(0,10);
if (ch11_space) {
    str = str.substring(0,str.lastIndexOf(' '));
}

Upvotes: 0

Benjamin Atkin
Benjamin Atkin

Reputation: 14725

Assuming that you'd rather have a cut off string than an empty string, if the word is longer than ten characters:

function shorten(txt)
{
  // if it's short or a space appears after the first 10 characters, keep the substring (simple case)
  if (txt.length <= 10 || txt[10] === ' ') return txt;
  // get the index of the last space
  var i = txt.substring(0, 11).lastIndexOf(' ');
  // if a space is found, return the whole words at the start of the string;
  // otherwise return just the first 10 characters
  return txt.substring(0, i === -1 ? 11 : i);
}

Upvotes: 0

Andreas Eriksson
Andreas Eriksson

Reputation: 9027

You could do what you do, substringing the text to 10 chars.

Then you use txt.lastIndexOf(' ') to find the last space in the text.

Then you use that to substring the text again.

Example:

var txt = "A Sample Text";
txt = txt.subString(0,10); // "A Sample T"
txt = txt.subString(0, txt.lastIndexOf(' ')); // "A Sample"

Let me know if it helps!

Upvotes: 2

Related Questions