Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript substring()创建阅读更多链接_Javascript_Jquery_Asp Classic - Fatal编程技术网

使用javascript substring()创建阅读更多链接

使用javascript substring()创建阅读更多链接,javascript,jquery,asp-classic,Javascript,Jquery,Asp Classic,我正在开发一个经典的ASP页面,它从数据库中提取一些内容,并在前100个字符后创建一个ReadMore链接,如下所示: <div class="contentdetail"><%=StripHTML(rspropertyresults.Fields.Item("ContentDetails").Value)%></div> <script type="text/javascript"> $(function() { va

我正在开发一个经典的ASP页面,它从数据库中提取一些内容,并在前100个字符后创建一个ReadMore链接,如下所示:

<div class="contentdetail"><%=StripHTML(rspropertyresults.Fields.Item("ContentDetails").Value)%></div>

<script type="text/javascript">
    $(function() {

        var cutoff = 200;
        var text = $('div.contentdetail').text();
        var rest = $('div.contentdetail').text().substring(cutoff);
        if (text.length > 200) {
          var period = rest.indexOf('.');
          var space = rest.indexOf(' ');
          cutoff += Math.max(Math.min(period, space), 0);
        }

        var visibleText = $('div.contentdetail').text().substring(0, cutoff);

        $('div.contentdetail')
            .html(visibleText + ('<span>' + rest + '</span>'))
            .append('<a title="Read More" style="font-weight:bold;display: block; cursor: pointer;">Read More&hellip;</a>')
            .click(function() {
                $(this).find('span').toggle();
                $(this).find('a:last').hide();
            });

        $('div.contentdetail span').hide();
    });
</script>

$(函数(){
var截止=200;
var text=$('div.contentdetail').text();
var rest=$('div.contentdetail').text().substring(截止);
如果(text.length>200){
var period=rest.indexOf('.');
变量空间=rest.indexOf(“”);
截止时间+=数学最大值(数学最小值(周期、空格),0);
}
var visibleText=$('div.contentdetail').text().substring(0,截断);
$('div.contentdetail')
.html(visibleText+(“”+rest+“”))
.append('Read More&hellip;'))
。单击(函数(){
$(this.find('span').toggle();
$(this.find('a:last').hide();
});
$('div.contentdetail span').hide();
});
然而,脚本显然只是在100个字符后删除文本。例如,我希望它能一直写到第一个句号或空格。这可能吗

多谢各位

var cutoff = 100;
var text = $('div.contentdetail').text();
var rest = text.substring(cutoff);
if (text.length > cutoff) {
  var period = rest.indexOf('.');
  var space = rest.indexOf(' ');
  cutoff += Math.max(Math.min(period, space), 0);
}
// Assign the rest again, because we recalculated the cutoff
rest = text.substring(cutoff);
var visibleText = $('div.contentdetail').text().substring(0, cutoff);
编辑:将其缩短一点。 编辑:修复了一个错误
编辑:提高生活质量

这里有一个相当简单的方法,可以在单词级别获得结尾,并在给定的字符限制范围内进行拍摄

var limit        = 100,
    text         = $('div.contentdetail').text().split(/\s+/),
    word,
    letter_count = 0,
    trunc        = '',
    i            = 0;

while (i < text.length && letter_count < limit) {
  word         = text[i++];
  trunc       += word+' ';
  letter_count = trunc.length-1;

}

trunc = $.trim(trunc)+'...';
console.log(trunc);
var限制=100,
text=$('div.contentdetail').text().split(/\s+/),
单词
字母计数=0,
trunc=“”,
i=0;
while(i
那么:

var text= $('div.contentdetail').text();
var match= text.match( /^(.{100}([^ .]{0,20}[ .])?)(.{20,})$/ );
if (match!==null) {
    var visibleText = match[1];
    var textToHide = match[3];
    ...do replacement...
}
{0,20}
在放弃并在恰好100个字符处中断之前,将等待最多20个字符的空格或句点。这就阻止了超长单词突破长度限制。最后的
{20,}
停止匹配,因为它只会隐藏少量毫无意义的内容

对于替换代码,请不要执行以下操作:

.html(visibleText+(“”+textToHide+“”))

这是在没有任何转义的情况下将纯文本插入HTML上下文。如果
visibleText
textToHide
包含任何
,可能我的问题搞错了,但您知道String.indexOf()函数,该函数返回某个子字符串第一次出现的索引(如果找不到该部分,则返回-1)。示例:警报(“foobar”).indexOf(“b”)警报“3”作为“b”的索引。也许你可以用它在想要的位置截断字符串?@moxn谢谢你的代码。出于某种原因,它没有缩短文本或创建阅读更多链接。也许我的jQuery代码现在无法使用您提供的代码?我会编辑帖子来显示我现在的代码。谢谢你。有一只奇怪的小虫子。我的正文首先截取如下:;“坐落在Molesscroft Beverley备受推崇的地区,这是一个展示得很好的独立家庭住宅”,但当我点击read more时,它似乎在结尾添加了一些字符,如下所示:;位于Molesscroft Beverley备受推崇的区域,这是一个表现良好的分离家族homome…”我修复了这个错误。当然,在
截止值调整后,必须使用substring()再次提取其余部分。但可能bobince的解决方案在性能上更好。。。
.html(visibleText + ('<span>' + textToHide + '</span>'))