1

Facebook スタイルのイベント招待スクリプトを作成中です。友達をモーダルなどに表示するようになりました。問題は、カテゴリを選択すると、カテゴリ ボタンが呼び出すスクリプトが、現在の ID を持つ div を除いて、group_friends コンテナー内のすべての 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」の前に 1 つ。div使用しているリテラルがクラス名であることは確かですか?

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

第二に、私は 100% 確実ではありません。notおそらく、ここで二重のステートメントを見逃したでしょう:

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

この式を単一のセレクターに変換します。

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

于 2012-04-19T01:24:49.903 に答える