作者laechan (揮淚斬馬雲)
看板mud_sanc
標題Re: [閒聊] jQuery
時間Tue Dec 25 10:07:30 2018
拍謝最近很忙,年底了上級交辦事項一堆。
那忙的事情剛好跟 sanc 明年要弄的東西有一點關連,這邊提一下,
就是類似上一篇的延伸,這篇講細一點。
我在 sanc 有寫一支程式,執行後它會幫我產生一張 html 表格,裡
面是 sanc 的全物件列表。
(/cmds/wiz/_loadall.c)
表格的每一列的內容大致長底下這樣:
<tr><th>切肉刀(Carver)</th>
<th>blade</th><th>40</th><th>70</th><th>120</th><th>700</th>
<th>無</th><th>無</th><th>無</th>
<th></th><th></th><th></th><th></th><th></th><th></th><th></th></tr>
blade 就是 type,40 70 120 700 那些就是重量、傷害、價格、命
中等等的參數,無 無 無 就是性別、種族、職業的持有限制,後面
一堆空的代表這東西沒有加屬性。
在這個表格的前面加上下面的東西:
請輸入關鍵字: <input type=text id=inputs</input>
<button onclick='start_filter()'>開始搜尋</button><p>"
然後 start_filter 函數就可以這樣寫
function start_filter()
{
inputs=document.getElementById("inputs").value;
我們希望每個關鍵字之間是以 空格 做為分隔:
inputs=inputs.replace(/ /gi," "); // 把全型空格變成半形空格
inputs=inputs.replace(/\,/gi," "); // 把逗號變成半形空格
inputs=inputs.replace(/ /gi," "); // 把空兩格變成空一格
再把它 explode,存進一個 array 中:
tmps=inputs.split(" ");
關鍵字之間的判斷關係為 and,比方 n 個關鍵字,那每個關鍵字
都要符合才回傳 true 值。
常見的關鍵字可分為以下兩種
1.關鍵字裡面有 OR,比方 bladeORsword,代表符合其中一項即可
2.關鍵字前面有 - 號,比方 -blade,代表去掉含有 blade 的
因此對每一個 <tr>...</tr> 來說:
$("tr").each(function(){
check=0;
trs=$(this).text(); // 讀取每一列 tr 的文字內容
for(i=0;i<tmps.length;i++)
{
tmp=tmps[i];
// 當關鍵字前面有 - 號時
if(tmp.substring(0,1)=="-")
{
// - 號後面接的字串如果不包含在 trs 內就是我們要找的,就讓 check+1
if(trs.indexOf(tmp.substring(1))<0)
check++;
}
else
{
tmps2=tmp.split("OR"); // 對關鍵字做 OR 的 explode
if(tmps2.length==1) // 代表關鍵字本身沒有 OR
{
// 就直接判斷該關鍵字有沒有在 trs 內,有的話 check+1
if(trs.indexOf(tmp)>=0)
check++;
}
else // 代表有 OR,對每一個子關鍵字做判斷
{
check2=0;
// 只要其中一個 match 就讓 check2=1
for(j=0;j<tmps2.length;j++)
if(trs.indexOf(tmps2[j])>=0)
check2=1;
// check2>0 代表其中一個子關鍵字有 match,就讓 check+1
if(check2>0)
check++;
}
}
}
// 當所有關鍵字都判斷完後
// 如果 check 值跟 sizeof(tmps) 相同,代表所有關鍵字都 match
// 那就讓這一列顯示
if(check==tmps.length)
$(this).show();
// 反之,就讓這一列隱藏
else
$(this).hide();
});
上面只是簡單的例子,實際上撰寫的判斷會更複雜,例如說我們要找
出如下的東西:
1. blade 類或 sword 類
2. 有加 air 或是有加 mag 的
光是這樣就要構思關鍵字要怎麼給,例如:
bladeORsword air>0ORmag>0
也就是說這時要增加 > 跟 < 兩種字符的判斷,那直覺想法就是這時
會有類似以下的關鍵字:
mag!=0、mag<0、mag>0 mag<100、...
再來就是如何讓大小寫能視為相同的搜尋,這個也是必須要考量的。
但是這東西如果寫出來,放在 google site,就能讓玩家透過外部網
站查武防具的資料,這個就是我明年要做的東西。
至於讓玩家在遊戲內以指令查詢的部份,我也有打算做。
繼續忙了。
Laechan
--
『無窮的宇宙,無盡的時空,無限的可能,與無常的人生之間
的永恆矛盾,從倪匡這顆腦袋中編織出來。 』
──金庸評倪匡
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.106.224
※ 文章網址: https://webptt.com/m.aspx?n=bbs/mud_sanc/M.1545703655.A.AED.html
※ 編輯: laechan (122.117.106.224), 12/25/2018 10:10:48
1F:→ laechan : 嘛,應該是用 .filter(function(){ 就可以解決 01/17 15:08