javascript/jquery事件未在刷新时触发

javascript/jquery事件未在刷新时触发,jquery,regex,refresh,Jquery,Regex,Refresh,我正在使用一些代码查找社交媒体内容的@和#标记。循环每x秒重新启动一次。在令人耳目一新的循环外,它工作得很好,但在内部它不会着火。代码如下: (function ($) { $(document).ready(function () { var refreshId = setInterval(function () { $('#main').fadeOut("fast").load(location.href + " #main>*"

我正在使用一些代码查找社交媒体内容的@和#标记。循环每x秒重新启动一次。在令人耳目一新的循环外,它工作得很好,但在内部它不会着火。代码如下:

    (function ($) {
    $(document).ready(function () {
        var refreshId = setInterval(function () {
            $('#main').fadeOut("fast").load(location.href + " #main>*", "").fadeIn("fast");
            //apply any new hashtags

            /*
             *   Hashtags
             */
            hashtag_regexp = /#([a-zA-Z0-9]+)/g;

            function linkHashtags(text) {
                return text.replace(
                hashtag_regexp,
                    '<span class="hashtag">#$1</span>');
            }
            atMention_regexp = /@([a-zA-Z0-9]+)/g;

            function linkatMention(text) {
                return text.replace(
                atMention_regexp,
                    '<span class="mention">@$1</span>');
            }

            $('p').each(function () {
                $(this).html(linkatMention($(this).html()));
                $(this).html(linkHashtags($(this).html()));
            });

        }, 10000);
    });
})(jQuery);
(函数($){
$(文档).ready(函数(){
var refreshId=setInterval(函数(){
$('#main').fadeOut(“fast”).load(location.href+“#main>*,”).fadeIn(“fast”);
//应用任何新的hashtag
/*
*标签
*/
hashtag_regexp=/#([a-zA-Z0-9]+)/g;
函数linkHashtags(文本){
返回text.replace(
hashtag_regexp,
'#$1');
}
ATREGEP=/@([a-zA-Z0-9]+)/g;
功能链接提及(文本){
返回text.replace(
ATU regexp,
'@$1');
}
$('p')。每个(函数(){
$(this.html)(链接提及($(this.html());
$(this.html)(linkHashtags($(this.html()));
});
}, 10000);
});
})(jQuery);

我重新修改了您的代码,但现在可以正常工作了:

  • 我将您的函数移到了
    setInterval
    之外,因为它们不应该反复声明
  • 我把做这个工作的那个位变成了另一个函数,并在最初和计时器中调用它
  • 我嵌套了
    html
    修改调用以加快速度
  • 使用本地$this变量避免多个jQuery选择器调用
  • 我添加了检查,以确保处理不会应用于段落两次(每10秒嵌套一次)
JSFiddle:
jQuery(函数($){
/*
*标签
*/
var hashtag_regexp=/#([a-zA-Z0-9]+)/g;
函数linkHashtags(文本){
if(text.indexOf('hashtag')=-1){
返回text.replace(
hashtag_regexp,
'#$1');
}
返回文本;
}
变量ATU regexp=/@([a-zA-Z0-9]+)/g;
功能链接提及(文本){
if(text.indexOf('notify')=-1){
返回text.replace(
ATU regexp,
'@$1');
}
返回文本;
}
函数更新(){
$('p')。每个(函数(){
var$this=$(this);
$this.html(linkatention(linkHashtags($this.html()));
});
}
var refreshId=setInterval(函数(){
$('#main').fadeOut(“fast”).load(location.href+“#main>*,”).fadeIn(“fast”);
//应用任何新的hashtag
更新();
}, 10000);
更新();
});

提示:您可以使用documentready
$(function(){})的快捷语法带有
jQuery(函数($){})以便您定义本地作用域。

您正在setInterval处理程序中声明您的函数。。。最好将它们放在
ready
函数中。此外,您还可以使整个就绪处理程序
jQuery(函数($){yourcodehere})
作为快捷方式,并且仍然有一个作用域
$
。您可以提供一个用于测试的HTML示例吗?(只需从浏览器另存为)您还需要停止处理任何现有的跨度标记,因为它会递归!现在开始。谢谢,这看起来也更可读!这将是一个noob问题,但是当我运行它时,我得到一个错误,返回的html中没有定义html。我也在运行jQuery1.11:/哎呀。打字错误都修好了。这是为了简单地返回传递的参数,但我忘记了名称(有时我讨厌弱类型语言——这就是为什么我使用TypeScript而不是原始JavaScript):)谢谢!现在看TypeScript:)我对TypeScript的推荐还不够。我所有的JavaScript现在都是干净的、高度面向对象的。如果您使用Visual Studio 2013,您现在可以获得完全集成的支持和调试(这在生产率方面是无与伦比的)。
jQuery(function ($) {
    /*
     *   Hashtags
     */
    var hashtag_regexp = /#([a-zA-Z0-9]+)/g;

    function linkHashtags(text) {
        if (text.indexOf('"hashtag"') == -1) {
            return text.replace(
            hashtag_regexp,
                '<span class="hashtag">#$1</span>');
        }
        return text;
    }

    var atMention_regexp = /@([a-zA-Z0-9]+)/g;

    function linkatMention(text) {
        if (text.indexOf('"mention"') == -1) {
        return text.replace(
        atMention_regexp,
            '<span class="mention">@$1</span>');
        }
        return text;
    }

    function updateMentions() {
        $('p').each(function () {
            var $this = $(this);
            $this.html(linkatMention(linkHashtags($this.html())));
        });

    }

    var refreshId = setInterval(function () {
        $('#main').fadeOut("fast").load(location.href + " #main>*", "").fadeIn("fast");
        //apply any new hashtags
        updateMentions();

    }, 10000);
    updateMentions();
});