javascript / jquery事件未通过刷新触发

时间:2014-06-05 16:27:44

标签: jquery regex refresh

我正在使用一些代码来查找社交媒体内容的任何@和#标签。循环重新每隔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);

1 个答案:

答案 0 :(得分:1)

我对你的代码进行了一些修改,但现在工作正常:

  • 我将您的功能移到了setInterval之外,因为它们不应该一遍又一遍地声明。
  • 我做了另一个功能,并且最初和定时器
  • 一起调用它
  • 我嵌套html修改调用以加快速度。
  • 使用本地$ this变量来避免多个jQuery选择器调用。
  • 我添加了检查以确保处理没有应用于段落两次(它每10秒无限地嵌套一次)。

JSFiddle:http://jsfiddle.net/TrueBlueAussie/cs369/6/

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();
});

提示:您可以将文档就绪$(function(){});的快捷语法与jQuery(function ($) {});一起使用,以便在本地范围内定义$