2012-07-31 118 views
0

在Forumotion上使用PunBB的想法是使用Points系统用一串文本替换显示的点数。使用span类,我首先在代码中定义了一个类“荣誉点”,该代码显示了用户拥有的点数。JQuery/PunBB用字符串替换数字

<span class="honorpoints"><!-- BEGIN profile_field -->{postrow.displayed.profile_field.CONTENT}<!-- END profile_field --></span> 

在论坛上使用该代码时,它将在用户名旁边显示一个基于用户点数的数字。以下jQuery代码是我试图用来替换数字的。

$(".honorpoints").each(function(){ 
    var elm = $(this); 
    var number = parseFloat(elm.text(), 10); 
    if (number >= 1 && number <= 500) { 
     state = "rank 1"; 
    } else if (number >= 500 && number < 3000) { 
     state = "rank 2"; 
    } 
    elm.text(state); 
}); 

但是,这并没有做任何事情,数字仍然存在。它应该用UserA:1和UserB:2代替UserA:234和UserB:571。但是,当在jsFiddle上使用代码时,以及仅使用数字代替{postrow.displayed.profile_field.CONTENT}代码。 帮助表示赞赏!

+0

我们可以看到'{postrow.displayed.profile_field.CONTENT}'输出了什么吗?在'var elm = $(this);'声明后面放置了一个'console.log('''+ elm.text()+'“');'后面会生成(F12,Console标签以查看控制台输出FF或Chrome上的Firebug或开发者工具)? – 2012-08-01 00:02:13

+0

@ZachShipley在检查Chrome中的元素时,输入console.log代码似乎没有做任何事情。这是一个链接到论坛的一部分,在海报的名字右边是一个数字和他们的等级。这个数字在“荣誉点”的跨度类中,但代码似乎甚至没有影响到它。 http://www.bvgstudios.net/t141-community-keep-communicating-7-10-2012 – user1567186 2012-08-01 00:17:07

回答

0

查看您在评论中提供的页面源,我相信您的$('.honorpoints').each方法在文档被完全加载(99546.js)之前被调用。除非我失去了一些东西,你需要用这种方法在$(document).ready功能,所以它是只执行一次DOM就绪:

$(document).ready(function() { 
    $(".honorpoints").each(function(){ 
     var elm = $(this); 
     var number = parseFloat(elm.text(), 10); 
     var state = ""; 
     if (number >= 1 && number <= 500) { 
      state = "rank 1"; 
     } else if (number >= 500 && number < 3000) { 
      state = "rank 2"; 
     } 
     elm.text(state); 
    }); 
}); 

我还添加了state变量,因为它是一个很好的做法声明(如它目前在你的问题中,state变量实际上是window.state,因为它之前没有声明)。

+0

是的工作!非常感谢! – user1567186 2012-08-01 00:59:34

+0

这工作,但我怎么能让5个不同的州? – user1567186 2012-08-01 01:42:14

0

以下行试图解析"UserA : 234",这就是为什么你会收到错误。 parseFloat(elm.text(), 10);

你必须解决您的if S,都匹配500

您可以使用下面的代码解决这个问题:

$(".honorpoints").each(function(){ 
    $(this).text(function(i, text) { 
     return text.replace(/\d+$/, function(match) { 
      if(match >= 1 && match <= 500) return "rank 1"; 
      else if(match > 500 && match < 3000) return "rank 2"; 
     }); 
    }); 
}); 

说明:

$:比赛结束串;
\d:仅匹配数字;
+:匹配一次或多次匹配,所以它可以匹配05000000;

参考

+0

刚刚试过但它没有工作:/ – user1567186 2012-08-01 00:30:31

+0

@ user1567186你把它放在'$(document).ready '?你可以看到我的演示正在运行。 – 2012-08-01 02:20:05