Re: [閒聊] jQuery

看板mud_sanc作者 (揮淚斬馬雲)時間5年前 (2018/12/25 10:07), 5年前編輯推噓0(001)
留言1則, 1人參與, 6年前最新討論串4/4 (看更多)
拍謝最近很忙,年底了上級交辦事項一堆。 那忙的事情剛好跟 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://www.ptt.cc/bbs/mud_sanc/M.1545703655.A.AED.html ※ 編輯: laechan (122.117.106.224), 12/25/2018 10:10:48

01/17 15:08, 6年前 , 1F
嘛,應該是用 .filter(function(){ 就可以解決
01/17 15:08, 1F
文章代碼(AID): #1S8P3dhj (mud_sanc)
討論串 (同標題文章)
文章代碼(AID): #1S8P3dhj (mud_sanc)