首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查具有相同属性的元素是否有任何具有活动类名的子元素

检查具有相同属性的元素是否有任何具有活动类名的子元素
EN

Stack Overflow用户
提问于 2018-12-16 12:15:31
回答 3查看 91关注 0票数 0

我正在尝试找出是否所有(ul)元素都有匹配的data-validation (required),并且它的任何子元素(li)都有(active)类。我只想确保(必需的) ul有活动的div。

我的代码如下:

代码语言:javascript
复制
<div class="fields">
    <ul class="ul-cls" data-validation="required">
        <li><div class="active"></div></liv>
        <li><div class=" "></div></liv>
    </ul>

    <ul class="ul-cls" data-validation="required">
        <li><div class="active"></div></liv>
        <li><div class=" "></div></liv>
        <li><div class=" "></div></liv>
        <li><div class="active"></div></liv>
    </ul>

    <ul class="ul-cls" data-validation="not-required">
        <li><div class="active"></div></liv>
        <li><div class="active"></div></liv>
    </ul>
</div>

我的JavaScript代码是:

代码语言:javascript
复制
$(".fields .ul-cls").each(function() {
    if ($(".ul-cls", this).attr('data-validation') == 'required') {
        if ($("li div.active").length >=1) {
            // Do something
        }
    }
});
EN

回答 3

Stack Overflow用户

发布于 2018-12-16 12:31:50

您可以使用Array.prototype.every检查每个.fields .ul-cls[data-validation="required"]是否都有一个.active后代。还要注意,<li>标记应该以</li>结尾,而不是以</liv>结尾

代码语言:javascript
复制
const allActive = Array.prototype.every.call(
  $('.fields .ul-cls[data-validation="required"]'),
  ul => $(ul).find('.active').length >= 1
);
if (allActive) {
  console.log('all are active!');
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="fields">
  <ul class="ul-cls" data-validation="required">
    <li>
      <div class="active"></div>
    </li>
    <li>
      <div class=" "></div>
    </li>
  </ul>
  <ul class="ul-cls" data-validation="required">
    <li>
      <div class="active"></div>
    </li>
    <li>
      <div class=" "></div>
    </li>
    <li>
      <div class=" "></div>
    </li>
    <li>
      <div class="active"></div>
    </li>
  </ul>
  <ul class="ul-cls" data-validation="not-required">
    <li>
      <div class="active"></div>
    </li>
    <li>
      <div class="active"></div>
    </li>
  </ul>
</div>

非传递示例:

代码语言:javascript
复制
const allActive = Array.prototype.every.call(
  $('.fields .ul-cls[data-validation="required"]'),
  ul => $(ul).find('.active').length >= 1
);
if (allActive) {
  console.log('all are active!');
} else {
  console.log('fail');
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="fields">
  <ul class="ul-cls" data-validation="required">
    <li>
      <div>this one is required but not active</div>
    </li>
    <li>
      <div class=" "></div>
    </li>
  </ul>
  <ul class="ul-cls" data-validation="required">
    <li>
      <div class="active"></div>
    </li>
    <li>
      <div class=" "></div>
    </li>
    <li>
      <div class=" "></div>
    </li>
    <li>
      <div class="active"></div>
    </li>
  </ul>
  <ul class="ul-cls" data-validation="not-required">
    <li>
      <div class="active"></div>
    </li>
    <li>
      <div class="active"></div>
    </li>
  </ul>
</div>

票数 1
EN

Stack Overflow用户

发布于 2018-12-16 12:39:00

使用find通过thisul-cls类中获取所需的元素/类,如下所示。我编辑了代码片段中的HTML内容,并在第一个ul div上添加了active类以检查条件。

代码语言:javascript
复制
$(".fields .ul-cls").each(function() {

  if ($(this).attr('data-validation') == 'required') {
      if ($(this).find($("li div.active")).length == $(this).find($(" li div")).length) {
      console.log('Pass the test')
    }
  }
});
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="fields">
  <ul class="ul-cls" data-validation="required">
    <li>
      <div class="active"></div>
    </li>
    <li>
      <div class="active"></div>
    </li>
  </ul>

  <ul class="ul-cls" data-validation="required">
    <li>
      <div class="active"></div>
    </li>
    <li>
      <div class=" "></div>
    </li>
    <li>
      <div class=" "></div>
    </li>
    <li>
      <div class="active"></div>
    </li>
  </ul>

  <ul class="ul-cls" data-validation="not-required">
    <li>
      <div class="active"></div>
    </li>
    <li>
      <div class="active"></div>
    </li>
  </ul>
</div>

票数 0
EN

Stack Overflow用户

发布于 2018-12-16 15:50:57

这似乎起作用了!

代码语言:javascript
复制
 SetTimeout(function(){

 var numReq = $('.fields .ul-cls[data-validation="required"]').length,
     numSel = $('.fields .ul-cls[data-validation="required"] li div.active').length; 

 console.log(numReq+"->"+numSel);

 if(numSel >= numReq){
     alert('validated!')
 }else{
    console.log('not valid')
 }
}, 100); 

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

https://stackoverflow.com/questions/53799378

复制
相关文章

相似问题

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