Jquery删除与数组中存储的数字不匹配的子元素

时间:2016-06-19 07:59:16

标签: javascript jquery arrays

我有一个数组:

var myArray = [1, 2, 4, 5]

我有一个HTML列表

<ul>
  <li> list 1 </li>
  <li> list 2 </li>
  <li> list 3 </li>
  <li> list 4 </li>
  <li> list 5 </li>
  <li> list 6 </li>
</ul> 

我试图隐藏所有与我的数组中的数字不匹配的第n个孩子。

有点像这样:

if li:nth-child("number not in myArray").remove();

我似乎无法确定谁正确循环,任何帮助将不胜感激。

感谢

4 个答案:

答案 0 :(得分:0)

您需要使用liforeach进行迭代,并检查其中li的每个var myArray = [1, 2, 4, 5]; $("li").each(function(index){ var liNum = $(this).text().match(/[\d]+/g)[0]; if (myArray.indexOf(parseInt(liNum)) == -1) $(this).remove(); });的数量。如果数组中的li数量不存在,请删除li。

&#13;
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li> list 1 </li>
  <li> list 2 </li>
  <li> list 3 </li>
  <li> list 4 </li>
  <li> list 5 </li>
  <li> list 6 </li>
</ul>
&#13;
<form action="/search" class="search_form" method="get" autocomplete="off">
                <div class="form-field">
                    <input type="text" name="s" class="search_keyword" id="search_keyword_id"
                           placeholder="Search the FTSE 100 & 250" required/>
                    <button type="submit" class="search_button" onclick="submitdata()">Search</button>
                    <div id="result">

                    </div>
                </div>
            </form>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用jQuery.eachArray.prototype.indexOf方法完成任务:

&#13;
&#13;
var array = [1, 3, 5, 7];
setTimeout(function() {
  var $list = $('.listToFilter li');
  $list.each(function(index, element) {
    if (array.indexOf(index) >= 0) {
      element.remove();
    }
  });
}, 1000);
             
  
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>wait 1 second to see the items being removed:</p>
<ul class="listToFilter">
    <li>Item 0</li>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
    <li>Item 4</li>
    <li>Item 5</li>
    <li>Item 6</li>
    <li>Item 7</li>
    <li>Item 8</li>
    <li>Item 9</li>
</ul>
&#13;
&#13;
&#13;

您不必使用setTimeout,我使用它只是为了让示例更加冗长。

答案 2 :(得分:0)

您可以使用filterindexOf方法。 :d

$("ul li").filter(function(){
    if([1, 2, 4, 5].indexOf($(this).index()+1)==-1)
    {return true;}
}).remove();

答案 3 :(得分:-1)

也许我应该补充一点,我根据用户输入动态获取数组,到目前为止这里的答案给了我这个错误:

Uncaught TypeError: Cannot read property '0' of null

我解决了我的问题,这可能有点冗长但到目前为止确实有效:

$(#myimput).each( function () {

  var myField = $(this).text();
  var myFieldArray = ("" + myField).split("");
  var listItem = ":nth-child(";
  var listItemAssambled = "";
  var x;

  for (x in myFieldArray ) {
   listItemAssambled += listItem + myFieldArray[x] + "), ";
  }

  listItemAssambled = listItemAssambled.substring(0, listItemAssambled.lastIndexOf(','));

  if ($(this).text() >= 1) {
      $(#mylist li).not(listItemAssambled).remove();       
   }
});