Javascript 如何在.each()中动态创建唯一的对象?
我正在对项目列表运行.each(),并在HTML中对这些项目进行分类。在之后的函数中,我将检查哪些项被选中(复选框)。在查找选中的框的函数(prepareTrainings();)中,我需要它显示.each()结果中的数据。基本上,如果用户选中X复选框,则显示该项目的课程名称和URL 我的问题是:我不确定什么是最佳实践。我是否应该创建一个对象来将这些值存储在if(trainingGroup等)语句中Javascript 如何在.each()中动态创建唯一的对象?,javascript,function,object,Javascript,Function,Object,我正在对项目列表运行.each(),并在HTML中对这些项目进行分类。在之后的函数中,我将检查哪些项被选中(复选框)。在查找选中的框的函数(prepareTrainings();)中,我需要它显示.each()结果中的数据。基本上,如果用户选中X复选框,则显示该项目的课程名称和URL 我的问题是:我不确定什么是最佳实践。我是否应该创建一个对象来将这些值存储在if(trainingGroup等)语句中 $.ajax({ url: "mySite", type: "GET", headers: {
$.ajax({
url: "mySite",
type: "GET",
headers: { "ACCEPT": "application/json;odata=verbose" },
success: function(data){
$.each(data.d.results, function(index) {
var $this = $(this);
var courseName = $this.attr('Title');
var courseNumber = $this.attr('Course_x0020_Number');
var courseUrl = $this.attr('URL');
var trainingGroup = $this.attr('Training_x0020_Group');
var recurrence = $this.attr('Recurrence');
var dynCourseId = courseName.replace(/\s+/g, '')
if (trainingGroup == 'Group1') {
if (recurrence == "Don't Specify") {recurrence = '';
} else recurrence = " ("+recurrence+")";
document.getElementById('officeListSpan').innerHTML += '<ul class="courseLists"><li><input type="checkbox" id="'+dynCourseId+'"/>'+courseName+recurrence+'</li></ul>';
}
if (trainingGroup == 'Group2') {
if (recurrence == "Don't Specify") {recurrence = '';
} else recurrence = " ("+recurrence+")";
document.getElementById('labListSpan').innerHTML += '<ul class="courseLists"><li><input type="checkbox" id="'+dynCourseId+'"/>'+courseName+recurrence+'</li></ul>';
}
});
},
error: function(){
alert("Failed to query SharePoint list data. Please refresh (F5).");
}
});
function prepareTrainings() {
var idSelector = function() {
return this.id;
};
var checkedCourses = $(":checkbox:checked").map(idSelector).get();
alert("IDs for Courses Selected: " + checkedCourses);
$.ajax({
网址:“mySite”,
键入:“获取”,
标题:{“ACCEPT”:“application/json;odata=verbose”},
成功:功能(数据){
$.each(data.d.results,function(index){
var$this=$(this);
var courseName=$this.attr('Title');
var courseNumber=$this.attr('Course_x0020_Number');
var courseUrl=$this.attr('URL');
var trainingGroup=$this.attr('Training_x0020_Group');
var recurrence=$this.attr('recurrence');
var dynCourseId=courseName.replace(/\s+/g',)
如果(培训组=='Group1'){
if(recurrence==“不指定”){recurrence='';
}else recurrence=“(“+recurrence+”);
document.getElementById('officeListSpan').innerHTML+='- '+courseName+recurrence+'
';
}
如果(培训组=='Group2'){
if(recurrence==“不指定”){recurrence='';
}else recurrence=“(“+recurrence+”);
document.getElementById('labListSpan').innerHTML+='- '+courseName+recurrence+'
';
}
});
},
错误:函数(){
警报(“查询SharePoint列表数据失败,请刷新(F5)”;
}
});
函数准备训练(){
var idSelector=function(){
返回此.id;
};
var checkedCourses=$(“:checkbox:checked”).map(idSelector.get();
警报(“所选课程的ID:+checkedCourses”);
}将处理过的对象保存在全局
var
中是有意义的。例如,定义如下所示的对象:
var courses = {};
然后在。每个函数中,像以前一样从HTML元素中提取信息,并将每个结果存储在另一个对象中:
$.each(data.d.results, function(index) {
var $this = $(this);
var course = {}; //Create empty object
course.name = $this.attr('Title');
course.number = $this.attr('Course_x0020_Number');
course.url = $this.attr('URL');
course.trainingGroup = $this.attr('Training_x0020_Group');
course.recurrence = $this.attr('Recurrence');
course.id = course.name.replace(/\s+/g, '')
//Store your course by id in the courses object
courses[course.id] = course;
//...
稍后在选中哪些复选框时,您可以检索每个课程的信息,如下所示:
var checkedIDs = $(":checkbox:checked").map(idSelector).get();
var course = courses[checkedIDs[0]]; //fetches the first selected course
//Now you can do whatever with the data, like print lists...
(...).innerHTML += '<ul class="courseLists"><li><input type="checkbox" id="'+course.id+'"/>'+course.name+course.recurrence+'</li></ul>';
var checkedds=$(“:checkbox:checked”).map(idSelector.get();
var课程=课程[checkedds[0]]//获取第一个选定的课程
//现在你可以对数据做任何事情,比如打印列表。。。
(…).innerHTML+='- '+课程名称+课程重复次数+'
';
如果我没有留下评论,我希望我正确理解了你的问题。成功了!我今天早上一定没有很清楚地读到你的答复。但这确实有效。非常感谢!没问题:)你应该把这个标记为其他人的正确答案。我对stackoverflow的这一部分还是新手。我怎么做标记?我正在寻找一种方法来“投票”你等等。再次感谢你,你真的帮助了我!答案旁边应该有一个复选标记,您可以单击该复选标记,使其为绿色。要将答案标记为已接受,请单击答案旁边的复选标记,将其从灰色变为已填写