-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 に答える