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