Javascript IE8不在列表中使用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中它拒绝显示列表项。但是,它确实显示了正确的项目计数,这意味着

我正在开发一个异步数据库搜索工具。它目前与firefox和chrome一起使用,但与InternetExplorer(版本8)相比有一个巨大的缺陷

学生可以输入他们预期的MCAT和GPA分数,然后jquery将排名前25%或中间50%的学校进行分类。基本上,这是一个神经质的预科学生的梦(或噩梦)

jquery在JSON数据中循环,显示与
  • 项中的条件匹配的每个项。同样,它在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),查看jquery
    detach
    方法)


    祝你好运,希望这对你有用!

    太好了!非常感谢你的及时和知识渊博的回复。我一直在自学,并且遇到了IE的问题(另外,很明显,我不知道如何正确优化)让这个社区触手可及比你可能意识到的更有用。我唯一需要编辑的是标签中学校后面的另一个“+”,否则它工作得很好。非常感谢。没问题samuel:)是的,这个网站对任何语言的新手都很有帮助(在我学习javascript的时候,它也帮了我很大的忙)。有问题的时候继续提问!