作者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/cn.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