如何针对变量中的一系列类检查所有列表项ID?

时间:2016-03-01 16:12:50

标签: javascript jquery

如果问过这个问题,请原谅重复。

我无法让我的代码检查ul类变量中每个可能的类选项的每个列表ID。

HTML:

<div class="category-filters-wrap">
    <ul class="ULClasses"> /* dynamic options that may contain multiple class options */
       <li id="Benefits">Item</li> /* Hard coded IDs */
       <li id="Resources">Item</li>
       <li id="Timecards">Item</li>
    </ul>
</div>

jQuery:

$('.category-filters-wrap').each(function() {

    $(this).find('li').each(function() {

        liID = $(this).attr('id'); /* Get ID from this list item */
        ULClass = $(this)closest('ul').attr('class'); /* Get Classes from closest UL to this list item */

        /* if the list ID matches ANY of the classes in the UL */
        if ($ (liID).hasClass(ULClass) ) {
            /* ... do stuff */
        }

    });

});

我尝试过这样的事情:

/* starting from if */
if (liID[1].match("(' + ULClass + ')") {
     /* ... do stuff */
}

/* starting from if */
if ($(liID).is(":contains('" + ULClass + "')")) {
     /* ... do stuff */
}        

但我想我现在只是把厨房的水槽扔到它上面。 在此先感谢您的帮助。我对jQuery相对较新(如果我犯了一些严重的noobie错误,请原谅)。如果你对我做错了什么有任何想法,你可以提供的更多细节来帮助我理解这一点,就越好!

格拉西亚斯!

2 个答案:

答案 0 :(得分:0)

您可以创建一个迭代类名并返回找到的类名的函数:

var searchClassName = function(string) {

  var arrayClasses = string.split(" ");

  for(var i = 0; i < arrayClasses.length; i++) {

    if($('#'+arrayClasses[i]).length > 0) {

      // the id with the className XXX was found!
      return arrayClasses[i];

    }

  }
  return false;
}

用法

searchClassName("string of classnames space separated");
// returns false if doesn't found
// returns the name of the classname found with id

整个代码段示例:

var searchClassName = function(string) {

  var arrayClasses = string.split(" ");

  for(var i = 0; i < arrayClasses.length; i++) {

    if($('#'+arrayClasses[i]).length > 0) {

      // the id with the className XXX was found!
      return arrayClasses[i];

    }

  }
  return false;
}



alert(searchClassName("Benefits Resources Timecards"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="category-filters-wrap">
    <ul class="Benefits AnotherClassname">
       <li id="Benefits">Item</li>
       <li id="Resources">Item</li>
       <li id="Timecards">Item</li>
    </ul>
</div>

答案 1 :(得分:0)

你当前的jquery使用find和最接近的“重”。

为什么不让自己的生活更轻松,并为每个li标签分配一个类(例如,称为“myclass”),然后对它们执行检查?当然,数据不长,你的DOM页面很短,然后性能不是问题 - 但就良好的做法而言,我会重新考虑你的寻求并找到思考过程。下面的示例将在您的页面中搜索所有具有类“myclass”的li标签 - 当它找到一个时,它会检查li标签是否具有“anotherclass”类,如果是,它会执行以下操作...... < / p>

$('li.myclass').each(function() {
        /* if the list ID matches ANY of the classes in the UL */
        if ($(this).hasClass("anotherclass") ) {
            /* ... do stuff */
        }
    });
});

或者下面的一个班轮将找到所有同时包含myclass和anotherclass的li标签然后做东西......

$('li.myclass.anotherclass').each(function() { /* do stuff */ });

我希望这个建议不会冒犯......