2012-07-31 104 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