Javascript IE8不在列表中使用JQUERY显示JSON数据
我正在开发一个异步数据库搜索工具。它目前与firefox和chrome一起使用,但与InternetExplorer(版本8)相比有一个巨大的缺陷 学生可以输入他们预期的MCAT和GPA分数,然后jquery将排名前25%或中间50%的学校进行分类。基本上,这是一个神经质的预科学生的梦(或噩梦) jquery在JSON数据中循环,显示与Javascript IE8不在列表中使用JQUERY显示JSON数据,javascript,jquery,json,internet-explorer,Javascript,Jquery,Json,Internet Explorer,我正在开发一个异步数据库搜索工具。它目前与firefox和chrome一起使用,但与InternetExplorer(版本8)相比有一个巨大的缺陷 学生可以输入他们预期的MCAT和GPA分数,然后jquery将排名前25%或中间50%的学校进行分类。基本上,这是一个神经质的预科学生的梦(或噩梦) jquery在JSON数据中循环,显示与项中的条件匹配的每个项。同样,它在ff和chrome中运行良好,但在InternetExplorer中它拒绝显示列表项。但是,它确实显示了正确的项目计数,这意味着
项中的条件匹配的每个项。同样,它在ff和chrome中运行良好,但在InternetExplorer中它拒绝显示列表项。但是,它确实显示了正确的项目计数,这意味着json数据正在正确地通过
在搜索stackoverflow之后,我看到了一些评论(色彩鲜艳,经常!),说明IE如何拒绝使用jquery将元素放置在表中以及其他一些innerhtml元素中
我想知道这是否是问题所在,尽管我在上发现了类似的问题,但我还是不太明白如何将其应用于我的项目(我是javascript新手)
任何帮助都会很好。代码可以在下面找到
-塞缪尔
$.getJSON("schoolgrabber.php?jsoncallback=?", function(data){
//loop through the items in the array
for(var x=0; x < data.length; x++){
if( MCAT >= data[x].TopPercentileMCAT && data[x].TopPercentileMCAT!=''){
var li = $("<li>").appendTo("#schoollist");
var school= data[x].School;
//add the actual information into the li using a chain event
//the event begins by appending an <a> tag, with the name of the school inside (text(data[x].School)
//then it adds a unique id, which is the iteration number the counter is on above (x)
//then it adds the url, and adds the school variable, which allows the schools to be clicked over to the results page
//then it puts all of that inside li, as declared above (slightly backwards, but hey)
$("<a>").text(data[x].School).attr("id",x).attr("href", "results.php?school=" + school).appendTo(li);
$("#schoollist li").addClass("school");
var quantity = $(".school").length;
$('#schoolquantity').empty();
$('#schoolquantity').append(quantity);
}}
});
$.getJSON(“schoolgrabber.php?jsoncallback=?”,函数(数据){
//循环遍历数组中的项
对于(var x=0;x=data[x].TopPercentileMCAT&&data[x].TopPercentileMCAT!=''){
var li=$(“”)。附录(“#学校列表”);
var school=数据[x]。学校;
//使用链事件将实际信息添加到li中
//事件首先附加一个标记,标记中包含学校的名称(text(data[x].school)
//然后它添加一个唯一的id,这是计数器在上面的迭代编号(x)
//然后添加url,并添加school变量,这样可以将学校点击到结果页面
//然后,它将所有这些都放在了li的内部,正如上面所说的(稍微向后,但是嘿)
$(“”).text(数据[x].School.attr(“id”,x).attr(“href”,“results.php?School=“+School”).appendTo(li);
$(“#学校列表li”).addClass(“学校”);
变量数量=$(“.school”)。长度;
$(“#学校数量”).empty();
$('学校数量')。追加(数量);
}}
});
不要使用jQuery和链接来构建DOM,而是尝试构建一个要呈现的HTML字符串,并一次性添加完成的字符串
它不仅可以修复您的错误,还可以获得更好的性能。我所做的是构建列表的完整HTML并计算数量。然后,当我完全构建完HTML后,我将其添加到DOM中。我下面的方法也更具可读性。请注意,我还没有测试过这一点,但您应该了解:
$.getJSON("schoolgrabber.php?jsoncallback=?", function(data){
//loop through the items in the array
var html = [];
var parentElement = $("#schoollist");
var quantity = 0;
for(var x=0; x < data.length; x++){
if( MCAT >= data[x].TopPercentileMCAT && data[x].TopPercentileMCAT!=''){
var school= data[x].School;
html.push("<li class=\"school\">");
html.push(" <a id=\"" + x + "\" href=\"results.php?school=" + school "\">");
html.push( data[x].School);
html.push(" </a>");
html.push("</li>");
quantity++;
}
}
parentElement.html(html.join(""));
$('#schoolquantity').html(quantity);
});
$.getJSON(“schoolgrabber.php?jsoncallback=?”,函数(数据){
//循环遍历数组中的项
var html=[];
var parentElement=$(“#学校列表”);
var数量=0;
对于(var x=0;x=data[x].TopPercentileMCAT&&data[x].TopPercentileMCAT!=''){
var school=数据[x]。学校;
html.push(“”;
html.push(“”);
html.push(“ ”);
数量++;
}
}
parentElement.html(html.join(“”);
$('#schoolquantity').html(数量);
});
请记住,每次更改DOM时,浏览器都必须做大量的工作来更新网页。这是非常昂贵的。您希望尽可能避免从DOM中添加/获取内容,而是“批处理”您的更改(作为旁注,如果您想在不“批处理”的情况下大量更改DOM),查看jquerydetach
方法)
祝你好运,希望这对你有用!太好了!非常感谢你的及时和知识渊博的回复。我一直在自学,并且遇到了IE的问题(另外,很明显,我不知道如何正确优化)让这个社区触手可及比你可能意识到的更有用。我唯一需要编辑的是标签中学校后面的另一个“+”,否则它工作得很好。非常感谢。没问题samuel:)是的,这个网站对任何语言的新手都很有帮助(在我学习javascript的时候,它也帮了我很大的忙)。有问题的时候继续提问!