【问题标题】:Jquery Twitter Like Character Counter offsets for shortened LinksJquery Twitter Like Character Counter 缩短链接的偏移量
【发布时间】:2023-03-26 11:12:01
【问题描述】:

您好,我正在尝试模仿 Twitter 上的字符计数器。因此,当您键入或粘贴时,限制会减少。但是我写这篇文章的服务也会有一个 url 缩短器,所以我想用最终 URL 的字符数来抵消它。缩短发生在发布端,而不是在您输入 URL 时。

我几乎可以正常工作,但是当我单击元素时,偏移量不再存在,并且字符数被设置回链接为全长时的值。我相信这是因为我使用的是 .change() 方法而不是 .bind("input paste") 但输入 paste 没有应用偏移量。

/* Character Count for Posts */                
function checkPostForURL(post){
    var matches = [],
        urlexp = new RegExp("(^|[ \t\r\n])((http|https):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))","g"),
        $linkShort = $('#linkstoshort'),
        matchIdx = 0;

    if ( post !== undefined ){
        if ( urlexp.test(post) ){
               var offset = 0;
               $('.shortenlinks').show();
               matches = post.match(urlexp);

               $linkShort.html('');

                for(; matchIdx < matches.length; matchIdx++) {
                    var match = matches[matchIdx],
                        matchOffset = match.length - 23;

                    offset += matchOffset;

                    $linkShort.append('<li>'+match+'</li>');
                }

                return offset;
        }
    }
 }

$(function(){
    var $postMsg = $('#post-msg'),
        message = $postMsg.text(),
        twstartchars = 140 - message.length,
        fbstartchars = 420 - message.length,
        $fbCount = $("#fb-char"),
        $twCount = $("#tw-char"),
        setRemainingChars = function (evt) {
            var a = $postMsg.val().length,
                post = $postMsg.val();        

            var offset = checkPostForURL(post);
            if ( offset ){
                a = a - offset;
            }

            $fbCount.text((420-a));
            $twCount.text((140-a));
            if ( a > 120 ){
                    $fbCount.css('color','red');
                    if ( a > 380 ){
                            $fbCount.css('color','red');
                    }
            }else{
                    $fbCount.css('color','#333');
                    $twCount.css('color','#333');
            }
        };

    $fbCount.text(fbstartchars);
    $twCount.text(twstartchars);

    $postMsg.on('keypress change', setRemainingChars);
});

更新:我制作了一个 JS fiddle 来更好地展示我正在尝试做的事情 http://jsfiddle.net/FUADn/384/

【问题讨论】:

  • 这太棒了。但是,我不确定数字 21 来自哪里。我假设这就是 Twitter 缩短网址的方式。我去了 twitter.com,我认为 21 必须是 23。您的代码和我的 twitter.com 测试似乎有 2 个字符的差异。否则很棒的 sn-p :)
  • 是的,这是 3 年前的事了,从那时起,他们需要在那个缩短的 URL 中添加更多字符,这在制作这个时真的很痛苦。绝对让我意识到我现在在 JS 方面有多好,我会通过一些修改来更新答案
  • 哈哈,还不错。我即将发送一个现场直播的网站,该网站基本上使用您的代码稍作修改并包装到一个 jquery 插件中,这样我就可以得到计算值。好sn-p!

标签: jquery regex url-shortener charactercount


【解决方案1】:

您是否尝试过在输入上绑定 .keyup() 事件而不是更改事件?这在技术上应该可以工作并在您使用 moust 等后保持绑定。

【讨论】:

  • 我尝试了 keyup,结果相同。您能否提供一个代码示例或修改上面的jsfiddle。
  • jsfiddle.net/FUADn/2 - 当我开箱即用时,这对我来说似乎很好用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多