我正在创建一个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,容器中的所有内容都是不可见的。我可能不会像我应该那样逻辑地看待这个。任何帮助都会很棒。感谢。
答案 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()