2015-06-24 35 views
-1

我试图检索一个div的长度,并在它达到250个字符之前的最后一个完整的单词时将其切断。我还需要添加“...”。我已经看到了几个与此相关的帖子,但似乎没有任何工作适合我。我没有在控制台中发现任何错误,所以我知道我的功能不正确。这个函数怎么会不会截断我的字符串?

function short(length) { 
    var s = document.getElementsByTagName('.message'), 
     len = s.length; 

    for (var i = 0; i < len; i++) { 
     var g = s[i].innerHTML, 
      x = '...', 
      leng = length- 3, 
      html = g.substring(0, leng) + "", 
      allHTML = html + x; 

     s[i].innerHTML = allHTML; 
    } 
} 

short(250); 
+0

你应该先格式化你的代码,第二确保它可以通过jshint,然后通过设置断点在重要线路,像你调用'getElementsByTagName'那里调试和检查结果。 –

回答

1

替换此:

document.getElementsByTagName('.message') 

有了这个:

document.querySelector('.message') 

的getElementsByTagName允许您选择的元素,但不是那些使用类的元素。例如。 <div>, <p>可以通过getElementsByTagName而不是<div class="message">(.message)来选择。要按类名选择,可以使用getElementsByClassName()。

为了您的利益,querySelector允许您选择任何类型的元素,如简单的元素,类元素,id为元素,以及更多。

0

在这里,我让你更容易阅读脚本,可重复使用:)。只需在你想过滤

var restrictWordCount = function (targ, maxWordsInt){ 
    "use strict"; 
    var words = targ.html().split(' '); 
    var wordCount = words.length; 
    var curCount = 0; 
    targ.html(''); 
    words.forEach(function(word){ 
    curCount = curCount + 1; 
    if (curCount < wordCount){ 
     targ.append(word+' '); 
    } 
    else { 
     targ.append('...'); 
    } 
    }); 
}; 
// Call it into action like so, pass each node you wish to have filtered as the first arg 

restrictWordCount($('button'), 4); 

节点通过下面是它的工作原理证明:http://codepen.io/nicholasabrams/pen/eNerzm

+0

什么是.html'方法或'$'?这对日语和韩语等没有空格的语言如何工作? –

+0

它不会以这种方式工作,但是这可以很容易地被修改来计算所有字符,然后做同样的事情。然后你可以通过这个字符数来代替字数,我可以提供更新。这种方法适用于任何实例。 $也是window.jQuery的简写形式 –

+0

除非OP要求提供或者将其包含在标签中,否则通常认为最好不要提供jQuery解决方案。 jQuery正逐渐失去相关性,认为理所当然是不合理的。几乎所有的jQuery都可以完成很好的基于标准的选择。 –

0

的事情是,你不需要做任何这一点。您可以简单地使用text-overflow: ellipsis CSS属性。

你会发现,你的解决方案,除了是太多不必要的代码,实际上并不能很好地工作。截断字符串的位置取决于容器的大小,字体系列和字体大小。将硬件线截断为固定长度的硬连线逻辑会导致字符串太短或太长。 CSS方法为你处理所有这些事情。

如果要截断多行字符串,以适应在一些预先确定的高度,事情有点复杂。但是为了救援。请参阅Insert ellipsis after specific number of lines。这不是字敏感,但可以做到这一点,没有太多的麻烦。

+0

这是真的。但是30个字符之后的某些地方怎么可以省略? –

+0

你怎么知道你想把它放在30个字符之后? –

+0

只是问题的相关代码。 –

相关问题