如何获取字符串的前X个字符丢弃标签的长度但保留标签?

时间:2016-09-01 05:31:16

标签: javascript html tags mootools string-length

所以,我想知道这种情况。基本上,我有一个函数,它将字符串作为输入,削减前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);
    });
}

不喜欢这是一个很大的问题,只是视觉上所有带格式的段落都有不同的预览长度,看起来很糟糕。

0 个答案:

没有答案