-5
(function($){
$(document).ready(function() {

 $('.nlgchat').hide(); // or do it with CSS...

      var usernames = ['Mr.EasyBB','runawayhorses','BL@DE','SirChivas'];

 var nameslist='';
 $('ul li a.mainmenu').each(function( i ){ 
var name = $(this).text().split(' ')[3];
nameslist += '||'+name; // ||dana||roko||john
 });

 for(i=0;i<usernames.length;i++){
 if( nameslist.indexOf( '||'+usernames[i] ) > -1 ){
    $('.nlgchat').show();
    return;
 }else{
    $('.nlgchat').remove();
    return;    
  }
}

 });
})(jQuery);

我使用此代码制作它,因此只有某些人可以看到,.nlgchat但该代码仅适用于我的名字,而不适用于列表中的其他任何人。

我希望上面列出的用户能够看到它,其他所有人.remove

http://jsfiddle.net/z62Pf/

4

1 回答 1

2

您的循环显示或删除循环中.nlgchat每个名称之后的元素。这意味着如果在列表中找不到名字(如您的示例中的情况),则该元素将被删除并且无法再次显示。

要修复,请在循环外使用布尔值,并在循环完成后显示或删除元素:

    doshow = false;
    for (i = 0; i < usernames.length; i++) {
        doshow = doshow || (nameslist.indexOf('||' + usernames[i]) > -1);
        // once it's true, it stays true
    }
    if (doshow) {
        $('.nlgchat').show();
    } else {
        $('.nlgchat').remove();
    }

http://jsfiddle.net/mblase75/NR7RG/

顺便说一句,除非nameslist在代码的其他地方使用,否则最好用一个简单的数组替换它。某些用户总是有可能||在他们的用户名中包含并弄乱您的代码:

    var nameslist = [];
    $('ul li a.mainmenu').each(function(i) {
        var name = $(this).text().split(' ')[3];
        nameslist.push(name);
    });

    doshow = false;
    for (i = 0; i < usernames.length; i++) {
        doshow = doshow || ($.inArray(usernames[i],nameslist) > -1);
    }

http://jsfiddle.net/mblase75/NR7RG/3/

http://api.jquery.com/jQuery.inArray/

于 2012-12-04T21:42:38.583 回答