Jquery根据用户输入选择包含多个类的元素[重复]

Posted

技术标签:

【中文标题】Jquery根据用户输入选择包含多个类的元素[重复]【英文标题】:Jquery select an element containing multiple classes with based on user input [duplicate] 【发布时间】:2011-04-27 20:02:52 【问题描述】:

可能重复:jQuery multiple class selector

我有一个输入字段“#q”,用户可以在其中键入搜索查询并返回一组与其类匹配的列表项。

function queryData() 
   q = $('#q').val();
   q = q.toLowerCase();
   var qs = q.split(' ');
   $('.item').fadeOut(300);
   for (n in qs)        
   $("li[class*='" + qs[n] + "']").fadeIn(1000);
                
 
<li class="apple"></li> <li class="apple banana"></li> <li class="banana"></li>

我不是专家,所以上面的代码可能看起来很粗糙。到目前为止,上面的代码只能显示类与查询匹配的 li,而不管查询中的单词数量如何。所以,如果我输入“苹果香蕉”,任何以苹果或香蕉为类的 li 都会淡入淡出()。我如何编辑这个函数,以便只有在其类中同时具有苹果和香蕉的 li 才会淡入淡出()?

【问题讨论】:

你到底想要什么?文本“苹果香蕉”只匹配中间的 li,还是匹配所有 3 个?文本“香蕉苹果”怎么样?它应该匹配其中任何一个吗?附带说明:我认为当变量有多个字母名称时,大多数人会发现阅读代码更容易。我认为描述性变量可以提高代码质量。此外,您可以使用“。”类的选择器。所以 "li ."+qs[n] 如果相等的话可能会更容易阅读(我不知道星星课后会做什么) 对不起,我的意思是同时匹配苹果和香蕉。编辑了我的消息。 仅供参考 - 您可以使用 .hasClass() 来测试元素是否具有指定的类。 【参考方案1】:

How can I select an element with multiple classes?

也试试这个:

函数查询数据() $('.item').fadeOut(300); $("李."+ ( $('#q') .val() .toLowerCase() .split(/\s+/) 。加入('。') ) ).fadeIn(1000);

【讨论】:

【参考方案2】:

我会使用术语列表来构建单个查询,例如

var qs = q.split(' ');
for (n in qs) 
    qs[n] = 'li.' + qs[n];

$(qs.join(', ')).fadeIn(1000);

这将在任何输入了任何类的“li”中消失。

引用的 jquery-multiple-class-selector 只匹配包含所有类的元素

编辑:刚刚看到您的编辑(需要所有类)。在这种情况下,请尝试

$('li.' + q.replace(' ', '.')).fadeIn(1000);

【讨论】:

以上是关于Jquery根据用户输入选择包含多个类的元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从使用 jQuery 的代码中指定的元素中选择具有给定类的下一个元素

jQuery 选择器:获取包含特定单词的第一个元素类的内容

jQuery - 选择输入字段的关联标签元素[重复]

jquery on('change'......不能在多个标签中工作[重复]

使用 jQuery 访问具有多个类的元素

jQuery使用同一类的多个按钮返回一个值[重复]