我有一个数组:
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();
我似乎无法确定谁正确循环,任何帮助将不胜感激。
感谢
答案 0 :(得分:0)
您需要使用li
对foreach
进行迭代,并检查其中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。
<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;
答案 1 :(得分:0)
您可以使用jQuery.each
和Array.prototype.indexOf
方法完成任务:
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;
您不必使用setTimeout
,我使用它只是为了让示例更加冗长。
答案 2 :(得分:0)
您可以使用filter
和indexOf
方法。 :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();
}
});