.each 関数内に変数が設定されている場合、.each 関数はすべてのアイテムを適切にループしないようです。これがアイテムが削除されない理由であると想定しています。しかし、ループをテストするために使用した2番目の関数は、それが機能することを示しています。
特別な理由は?
HTML コード:
<div id="top-menu">
<ul id="top-menu-main-ul">
<li class="top-menu-main-li">
<a href="#" title="Home">Home</a>
<div class="arrow-bg-above-ul"> </div>
<ul class="top-menu-child-ul">
<li class="top-li-ztyle"><a class="menu-item-2" href="index.php">Admin Home</a></li>
<li><a class="menu-item-2" href="myaccount.php">My Account</a></li>
<li class="bottom-li-ztyle"><a class="menu-item-0" href="logout.php">Logout</a></li>
</ul>
</li>
<li class="top-menu-main-li">
<span class="separator"><a href="#" title="Clients">Clients</a></span>
<div class="arrow-bg-above-ul"> </div>
<ul class="top-menu-child-ul">
<li class="top-li-ztyle"><a class="menu-item-3" href="clients.php">View/Search Clients</a></li>
<li><a class="menu-item-4" href="clientsadd.php">Add New Client</a></li>
<li class="bottom-li-ztyle"><a class="menu-item-5" href="massmail.php">Mass Mail Clients</a></li>
</ul>
</li>
</ul>
</div>
jQuery コード:
var arrayOfitems = ["1","2","33","34","35","36","37","38","39","40","41","42","77"];
$(document).ready(function(){
$(".top-menu-child-ul li a").each(function() {
var thisClass = $(this).attr('class');
var thisClassNum = thisClass.replace('menu-item-', '');
var searchForThisNum = thisClassNum.toString();
if($.inArray(searchForThisNum, arrayOfitems) !== -1 )
{
// do nothing
}
else
{
$("." + thisClass).closest('.li').remove();
}
});
// test that loop should work
var myArray = [];
$(".top-menu-child-ul li a").each(function() {
myArray.push($(this).attr('class'));
});
alert(myArray);
});
フィドルの例: - http://jsfiddle.net/LmUPL/2/