如果在尝试隐藏除了一个之外的每个div时循环

时间:2012-04-19 00:20:42

标签: javascript jquery facebook

我正在创建一个facebook风格的活动邀请脚本。我已经让朋友们在我的模态等中显示了,我遇到的问题是,当你选择一个类别时,类别按钮所调用的脚本应该隐藏group_friends容器中的所有div,除了div与正在查询当前的id。这是我正在努力的功能:

function get_group_friends(element){
var group_id=($(element).attr("id")); 

console.log((($("div[id^="+group_id+"]")).children()).length);

if(((($(".div[id^="+group_id+"]").children()).length)) == 0)
     {

      $("#container_group_friends").children().not($("div[id^="+group_id+"]")).hide();
       $("#container_all_friends").hide();

  var query = "SELECT uid, name, pic_square FROM user WHERE uid IN(SELECT uid FROM group_member WHERE gid = "+($(element).attr("id"))+" AND uid IN(SELECT uid2 FROM friend WHERE uid1=me()))"; 
FB.api({access_token: accessToken, method:'fql.query', query: query}, function(response_group_friend)
{
   var i=0;
   var result_group_friend="";
   for(i=0; i<response_group_friend.length; i++)
   {
      result_group_friend+="<div class='fbfriends' id='"+response_group_friend[i].uid+"' ><div class='user float_left'><img src='"+response_group_friend[i].pic_square+"'/><div class='tick'></div></div><div class='friend_name float_left'>"+response_group_friend[i].name+"</div></div>";

   }   $("div[id^="+group_id+"]").append(result_group_friend);

  //    $("#container_group_friends").append($("div[id^="+group_id+"]"));
 });

}
 else
{
        ($("#container_group_friends").children().not($("div[id^="+group_id+"]"))).hide();
      $("#container_all_friends").hide();
 }

}

问题是当我点击另一个类别时,即使是查询了特定id的div,容器中的所有内容都是不可见的。我可能不会像我应该那样逻辑地看待这个。任何帮助都会很棒。感谢。

2 个答案:

答案 0 :(得分:2)

通过几个假设,代码应简化如下:

function get_group_friends(element) {
    var group_id = $(element).attr("id");
    var $groupContainer = $("div[id^=" + group_id + "]");
    $("#container_group_friends").children().not($groupContainer).hide();
    $("#container_all_friends").hide();
    //console.log($groupContainer.children().length);
    if( $groupContainer.children().length == 0 ) {
        var query = "SELECT uid, name, pic_square FROM user WHERE uid IN(SELECT uid FROM group_member WHERE gid = " + group_id + " AND uid IN(SELECT uid2 FROM friend WHERE uid1=me()))";
        FB.api({access_token: accessToken, method:'fql.query', query: query}, function(response_group_friend) {
            $.each(response_group_friend, function(i, f) {
                $groupContainer.append("<div class='fbfriends' id='" + f.uid + "' ><div class='user float_left'><img src='" + f.pic_square + "'/><div class='tick'></div></div><div class='friend_name float_left'>" + f.name + "</div></div>");
            });
        });
    }
}

除非我犯错误,否则什么都不应该改变。

问题似乎是没有显示当前组容器的语句,因此如果先前选择了另一个组(即类别),它将保持隐藏状态。

尝试将上面代码的第3行更改为:

var $groupContainer = $("div[id^=" + group_id + "]").show();

答案 1 :(得分:1)

首先,第4行代码中有不需要的点。选择器内的'div'之前的一个。您确定,您使用的div字面是否有类名?

if(((($(".div[id^="+group_id+"]").children()).length)) == 0) if($("div[id^="+group_id+"]").children().length == 0)

其次,但我不是百分百肯定。您可能在这里错过了双not语句:

  

$( “#container_group_friends”)。孩子()。的 ($( “DIV [<强> * ID ^ = ” + GROUP_ID + 。 “]”))隐藏();

我将此表达式转换为单个选择器:

  

$(“#container_group_friends&gt; div:not(#”+ group_id +“)”)。hide()