我试图在数据库应用程序上设置过滤器,以便侦察阵营失去属性。这个想法如下:
丢失的财产项目由接待人员记录在数据库中,作为“失去的”,“联系人”,“所有者通知”和“#39;所有者通知'或者'退回' (表示从表生成的4个列表,其状态标志用于过滤项目出现的列表)。
在每个列表的顶部,我有一个表单字段(文本),我想用它来过滤列表,只需要接收团队成员输入一些描述该项目的单词(例如,Jacket blue)< / p>
我为列表中的每一行设置了一个公共类名(每个列表都有一个不同的列,所以listLost,listFound,listNotified,listReturned)
然后我使用了一些数据库字段来向列表添加其他类(例如,项目,颜色,名字,姓氏 - 这些转换为UCASE以绕过JavaScript的区分大小写的特性),所以最终的课程可能如下:
class="listLost JACKET BLUE FRED BLOGGS"
接待团队成员可以输入文本字段,例如&#39; Jacket Blue&#39;我的JavaScript函数应该按如下方式过滤列表:
将文本字段的输入拆分为数组,使用SPACE作为分隔符
它会查找页面中具有特定公共类名称的所有项目(在此示例中,它将是listLost)
然后通过数组页面比较每个(在这种情况下,表格行)的类列表与数组值,如果找到匹配,将显示表行,如果没有,它会赢得&#t; t
这是我的JavaScript功能:
function filterLostProperty(filterField,filterList)
{
var filterStr = document.getElementById(filterField).value;
var filterVals = filterStr.split(" ");
var filterItems = document.getElementsByClassName(filterList);
var displayCheck = 0
for (x = 0; x < filterItems.length; x++)
{
for (y = 0; y < filterVals.length ; y++)
{
if (filterItems[x].classList.contains(filterVals[y].toUpperCase()))
{
displayCheck++
}
}
if (displayCheck > 0)
{
filterItems[x].style.display = "table-row";
}
else
{
filterItems[x].style.display = "none";
}
}
}
表单字段包含:
onChange="filterLostProperty('filterLost','listLost')
其中filterLost是搜索字符串所来自的文本字段的ID。
问题:它并没有真正按照应有的方式进行过滤......有些字符串只会生成所有内容,有些会调出你想要的项目加上2你没有生成,有些字符串不能生成什么都没有。当有不止一个词时,它会变得更加奇怪。
有没有人对我在哪里出错?或者我的方法过于复杂,我错过了一个简单的伎俩?
2017年11月21日
所以 - 在我有点想法之后我进一步编辑了我的函数,而不是生成过滤器文本的数组(因为数组方法只使用最后输入的单词作为过滤器文本),我只想创建一个字符串在每一个之间使用AND(使用替换函数用AND运算符替换SPACE),希望它会执行一个&#39;如果类列表包含X和Y和Z那么等等等等等等等...
我在测试页面上首先使用固定值对此进行了测试:
function manualFilter(filterList)
{
var filterItems = document.getElementsByClassName(filterList);
for (x = 0; x < filterItems.length; x++)
{
{
if (filterItems[x].classList.contains("WALLET" && "BLUE"))
{
filterItems[x].style.display = "table-row";
}
else
{
filterItems[x].style.display = "none";
}
}
}
}
我的测试页面位于https://bookings.springbank.org.uk/testFilter.asp,点击“手动过滤器”即可触发测试过滤器。按钮。 问题是,当我这样做的时候,我按预期得到了WALLET BLUE的行(而不是WALLET BLACK这行好的行)......但是我也得到了带有JACKET BLUE的行(大概是因为它&#39; s匹配蓝色)...理想情况下,我不希望这个显示。
如果可以这样做(有效地用文本字段输入中的空格替换AND操作符以便由IF语句解释)...唯一的其他位我不完全清楚(不是特别精通JavaScript)是我如何从函数中动态地做到这一点......大概它会是一定数量的连续引号,以便&amp;&amp; amp;被解释为和AND运算符,而不仅仅是字符串的一部分?