: 包含多个单词

2023-12-02

我正在使用以下 jQuery

var etag = 'kate'
if (etag.length > 0) {
    $('div').each(function () {
        $(this).find('ul:not(:contains(' + etag + '))').hide();
        $(this).find('ul:contains(' + etag + ')').show();
    });
}​

对于以下 HTML

<div id="2">
<ul>
  <li>john</li>
  <li>jack</li>
</ul>
<ul>
  <li>kate</li>
  <li>clair</li>
</ul>
<ul>
  <li>hugo</li>
  <li>desmond</li>
</ul>  
<ul>
  <li>said</li>
  <li>jacob</li>
</ul>
  </div>

    <div id="3">
<ul>
  <li>jacob</li>
  <li>me</li>
</ul>
<ul>
  <li>desmond</li>
  <li>george</li>
</ul>
<ul>
  <li>allen</li>
  <li>kate</li>
</ul>  
<ul>
  <li>salkldf</li>
  <li>3kl44</li>
</ul>
</div>

基本上,只要 etag 有一个单词,代码就可以完美运行并隐藏那些不包含 etag 的元素。我的问题是,当 etag 是多个单词(并且我无法控制它。它来自数据库并且可能是用空格字符分隔的多个单词的组合)时,代码将不起作用。

有什么办法可以实现这一点吗?


此过滤器检查给定字符串中的任何单词是否与元素的文本匹配。

jQuery.expr[':'].containsAny = function(element, index, match) {
    var words = match[3].split(/\s+/);
    var text = $(element).text();
    var results = $.map(words, function(word) {
        return text === word;
    });
    return $.inArray(true, results) !== -1;
};

显示和隐藏为:

$('ul').hide();
$('li:containsAny(john kate)').parents('ul').show();

看一个例子here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

: 包含多个单词 的相关文章

随机推荐