JavaScript - 如果类列表包含来自Array

时间:2017-11-20 05:37:52

标签: javascript arrays

我试图在数据库应用程序上设置过滤器,以便侦察阵营失去属性。这个想法如下:

丢失的财产项目由接待人员记录在数据库中,作为“失去的”,“联系人”,“所有者通知”和“#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运算符,而不仅仅是字符串的一部分?

0 个答案:

没有答案