首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从不同列表中匹配相同的字符串

从不同列表中匹配相同的字符串
EN

Stack Overflow用户
提问于 2019-04-19 10:36:05
回答 1查看 35关注 0票数 0

我有一个HTML结构,包括:

A)具有如下类的N-div的列表:

代码语言:javascript
复制
<div class="classes">
   <div class="alpha">...</div>
   <div class="beta">....</div>
   <div class="gamma">.....</div>
   <div class="alpha beta">.....</div>
   <div class="alpha">....</div>
   <div class="beta gamma"></div>
   <div class="alpha beta gamma">.....</div>
   <div class="alpha">....</div>
   ....
</div>

( B)包含数据属性的N个选项填充的select,如下所示:

代码语言:javascript
复制
<select id="classSelect">
    <option value="something" data-class="alpha"></option>
    <option value="something-2" data-class="alpha"></option>
    <option value="something-3" data-class="beta"></option>
    <option value="something-4" data-class="alpha beta"></option>
    <option value="something-4" data-class="beta gamma"></option>
    ...
</select>

我想达致以下的机制:

A)找到所有有class="alpha"的div

B)将divs字符串'alpha‘与每个包含'alpha’的数据属性的select选项进行比较。

C)禁用或隐藏不包含字符串的选项。

到目前为止,我认为我需要: 1)使用.alpha遍历每个div,2)获取它们的类,使用.filter()将字符串与所有选项的数据属性匹配。

代码语言:javascript
复制
$('div.alpha').each(function() {
    var $item = $(this);
    var itemClasses = $item.attr('class');    
    $('#classSelect option').filter(function() { 
       *** CANT FIGURE OUT THIS PART ***
    });  
});

但我不明白步骤B的逻辑或语法(主要是)。

过滤后的输出应该如下所示:

代码语言:javascript
复制
<select id="classSelect">
    <option value="something" data-class="alpha"></option>
    <option value="something-2" data-class="alpha"></option>
    <option value="something-3" data-class="beta" disabled></option>
    <option value="something-4" data-class="alpha beta"></option>
    <option value="something-4" data-class="beta gamma" disabled></option>
    ...
</select>

<div class="classes">
   <div class="alpha">...</div>
   <div class="beta">....</div>
   <div class="gamma">.....</div>
   <div class="alpha beta">.....</div>
   <div class="alpha">....</div>
   <div class="beta gamma"></div>
   <div class="alpha beta gamma">.....</div>
   <div class="alpha">....</div>
   ....
</div>

有人能给我个提示吗?谢谢您抽时间见我

EN

回答 1

Stack Overflow用户

发布于 2019-04-19 10:57:13

要选择所有不包含字符串的data-class选项(在您的例子中是'alpha‘),只需这样做。(这只能用css来完成,但我想您的最终代码会更复杂,这就是您想使用jQuery的原因)。这也可以用普通的javaScript来完成。

不知道为什么要选择div的第一个。也许我没有正确理解你的要求。

代码语言:javascript
复制
var options = $("#classSelect option")

$(options).each(function() {
	var dataClass = $(this).data('class')
  if ( !dataClass.includes('alpha')) {
  	$(this).attr('disabled', true) // or hide() if you want to remove them
  }
})
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="classes">
   <div class="alpha">alpha</div>
   <div class="beta">beta</div>
   <div class="gamma">gamma</div>
   <div class="alpha beta">alpha beta</div>
   <div class="alpha">alpha</div>
   <div class="beta gamma">beta gamma</div>
   <div class="alpha beta gamma">alpha beta gamma</div>
   <div class="alpha">alpha</div>
</div>

<select id="classSelect">
    <option value="something" data-class="alpha">alpha</option>
    <option value="something-2" data-class="alpha">alpha</option>
    <option value="something-3" data-class="beta">beta</option>
    <option value="something-4" data-class="alpha beta">alpha beta</option>
    <option value="something-4" data-class="beta gamma">beta gamma</option>
</select>

或者您可以这样做(如果您不需要遍历选项,因为其他原因)

$("#classSelect option").not("[data-class*='alpha']").attr('disabled',true)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55760525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档