Javascript 如何停止在html选项下拉框中复制查询结果?
使用parse.com和Javascript SDK 更新-我已经创建了一个小提琴来显示问题 下面的代码返回当前用户连接到的朋友列表。然后在选项下拉框中显示结果,供用户选择朋友。解析中有3条状态为“已连接”的记录,Chrome中的inspect元素中也显示了3条记录 由于某些原因,当结果显示在下拉框中时,它们将被复制 我需要包括toUser和fromUser,另外,仅使用其中一个,您只能获得1/2的好友连接 如何在下拉框中停止复制?一个工作示例/anwser将是惊人的Javascript 如何停止在html选项下拉框中复制查询结果?,javascript,jquery,parse-platform,Javascript,Jquery,Parse Platform,使用parse.com和Javascript SDK 更新-我已经创建了一个小提琴来显示问题 下面的代码返回当前用户连接到的朋友列表。然后在选项下拉框中显示结果,供用户选择朋友。解析中有3条状态为“已连接”的记录,Chrome中的inspect元素中也显示了3条记录 由于某些原因,当结果显示在下拉框中时,它们将被复制 我需要包括toUser和fromUser,另外,仅使用其中一个,您只能获得1/2的好友连接 如何在下拉框中停止复制?一个工作示例/anwser将是惊人的 ![var curren
![var currentUser = Parse.User.current();
var FriendRequest = Parse.Object.extend("FriendRequest");
var queryOne = new Parse.Query(FriendRequest);
queryOne.equalTo("toUser", currentUser);
var queryTwo = new Parse.Query(FriendRequest);
queryTwo.equalTo("fromUser", currentUser);
var mainQuery = Parse.Query.or(queryOne, queryTwo);
//mainQuery.include('toUser');
mainQuery.include('fromUser');
mainQuery.equalTo("status", "Connected");
mainQuery.find({
success: function(results) {
var friends = \[\];
for (var i = 0; i < results.length; i++) {
friends.push({
username: results\[i\].get('fromUser').get('username'),
userId: results\[i\].get('fromUser').id,
});
var select = document.getElementById("selectFriend");
$.each(friends, function(i, v) {
var opt = v.userId;
var optfrontend = v.username;
var el = document.createElement("option");
el.textContent = optfrontend;
el.value = opt;
select.appendChild(el);
})
}
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
![var currentUser=Parse.User.current();
var FriendRequest=Parse.Object.extend(“FriendRequest”);
var queryOne=newparse.Query(FriendRequest);
queryOne.equalTo(“toUser”,当前用户);
var queryTwo=newparse.Query(FriendRequest);
queryTwo.equalTo(“fromUser”,currentUser);
var mainQuery=Parse.Query.or(queryOne,queryTwo);
//mainQuery.include('toUser');
mainQuery.include('fromUser');
mainQuery.equalTo(“状态”、“连接”);
mainQuery.find({
成功:功能(结果){
变量friends=\[\];
对于(var i=0;i
HTML
选择一个朋友
您可以使用从阵列中删除重复项:
friends = $.unique( friends );
未经测试,但也可以直接在美元中工作。每个:
$.each($.unique(friends), function(i, v) { ...
更新:由于使用$.unique()不适用于好友
数组,可能好友
由具有相同用户名但不同其他值的唯一条目组成-因此可以使用以下方法:
var added = {};
$.each(friends, function(i, v) {
var opt = v.userId;
var optfrontend = v.username;
if(!added[optfrontend])
{
added[optfrontend]= true;
var el = document.createElement("option");
el.textContent = optfrontend;
el.value = opt;
select.appendChild(el);
}
});
演示
在处理$.each()
时,通过检查added[optfrontend]
是否为true,这只会将用户名添加到以前未添加的选项中
作为旁注-在使用jQuery时,还可以使用
var select = $("#selectFriend");
而不是
var select = document.getElementById("selectFriend");
但是你必须改变
select.appendChild(el);
进入
更新:当此方法中使用的
var added={};
在全局范围内声明时,建议的方法有效,因此它可以在each()
中访问。如果它声明在each()
的正上方,但在OP代码中的另一个函数中,它将在each()中未定义
这似乎是您的逻辑有问题…您有两个查询,一个从朋友请求中获取toUser
,另一个从用户获取。。然后您将这两个查询都放在主查询中。唯一合乎逻辑的是,这样会得到重复的结果。@CBroe我想我上面提到过,但我需要同时包含这两种方法。好友请求可以来自User或toUser,如果两者都不使用,则只能获得50%的记录。我会尝试,我是同时使用您建议的两行还是两种不同的方法?@Dano007只有其中一种方法。第一种方法在$之前。每个(好友)
,我刚才在each()中直接提到了使用unique()的第二种方法
因为这样可以节省一行。@Dano007好的,我刚刚在更新的答案中添加了第二种方法。非常感谢,似乎仍然存在问题……您可以访问此小提琴吗?我在这里使用parse@Dano007 Yes创建了它,并在更新中修复了它。只需将添加的var={};
移到顶部即可(现在介于var queryTwo
和var mainQuery
)之间),现在它开始工作了。我添加了一些控制台日志消息,以便更容易地检查每个()中发生的事情。
select.appendChild(el);
select.append(el);