所以,我想知道这种情况。基本上,我有一个函数,它将字符串作为输入,削减前100个字符,使" ...更多"链接和文本的其余部分是隐藏的。 现在的问题是,字符串可以包含处理并影响文本的文本格式标签(如粗体,斜体等),问题是我想要的,让我们说,前30个字符就像这样显示:
This is a text to be displayed...More
但是,如果有,我会得到,让我们说,em标签:
<em>This is</em> a text to be d...More
标签本身不会显示,它们会添加格式(就像它应该的那样),但在使用.length时仍会计算它们。所以我得到的是
*This is* a text to be d...More
我的代码现在看起来像这样(使用MooTools):
p.each(function(mel){
var t = mel.get('html'); //get all the content of p
var str = t; //duplicate the string
var div = new Element('div', {html:str}); //this function strips tags though don't know if it's useful here
var text = div.textContent || div.innerText || "";
text;
if (text.length<100) return;
var tOne = t.substr(0,100); //breaking text on visible and non-visible
var tTwo = t.substr(101,t.length); //all the further code works creating "More" after 100 characters
var dots = new Element('span', {
'class':'unedit',
'text':'...'
});
var more = new Element('a', {
href: '#',
'class':'more unedit',
'text':'More'
});
var unseen = new Element('span', {
'class':'appended',
'html':tTwo,
styles: {
'display':'none',
}
})
var less = new Element('a', {
href: '#',
'class':'less unedit',
'text':'Less'
})
unseen.grab(new Element('br'));
unseen.grab(less);
mel.set('html', tOne);
mel.grab(dots);
mel.grab(more);
mel.grab(unseen);
});
}
不喜欢这是一个很大的问题,只是视觉上所有带格式的段落都有不同的预览长度,看起来很糟糕。