1

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

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。我可能没有按照我应该的逻辑来看待这个问题。任何帮助都会很棒。谢谢。

4

2 回答 2

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();
于 2012-04-19T02:15:23.967 回答
1

首先,第 4 行代码中有不需要的点。选择器内“div”之前的一个。你确定,div你在那里使用的文字是类名吗?

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

其次,但我不是 100% 确定。您可能在这里错过了双重not声明:

$("#container_group_friends").children(). 不是($("div[ *id^= "+group_id+"]")).hide();

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

$("#container_group_friends > div:not(#" + group_id + ")").hide()

于 2012-04-19T01:24:49.903 回答