1

我有一个脚本,它通过 AJAX 获取一些 JSON,并使用一个函数将其插入到两列中,以将数据插入到一个简单的 HTML 模板中:

function projectTemplate(obj) {
    var template = '<div class="result '+searchResults+'"><a href="'+obj.url+'"><span class="title">'+obj.title+'</span><span class="desc">'+obj.desc+'</span></a><span class="topics">'+obj.topics+'</span>';
    if (obj.status != '') {
        template += ' | <span class="status">'+obj.status+'</span></div>';
    }
    template += '</div>';
    return template;
}

function processResults(data) {
    ajaxData = $.parseJSON(data);
    [...]
    if (typeof ajaxData.pages !== 'undefined') {
        var resultCount = 0, displayCount = 0;
        for (var key in ajaxData.pages) {
            resultCount++;
        }
        for (var key in ajaxData.pages) {
            var obj = ajaxData.pages[key];
            if (searchResults) {
                $('.col-left').append(projectTemplate(obj));
            } else {
                if (displayCount < (resultCount/2)) {
                    $('.col-left').append( projectTemplate(obj) );
                } else {
                    $('.col-right').append( projectTemplate(obj) );
                }
                displayCount++;
            }
            //console.log(key);
        }
    } else {
        $('.results h2 span').text('');
        var pageType = (searchResults) ? 'pages' : 'projects';
        $('#ajax-article-list .col-left').html('<strong class="no">No ' + pageType + ' found.</strong>');
    }
}

问题是 IE8 循环遍历每个元素,ajaxData.pages但它似乎将结果叠加在一起,所以我最终只有一个(即使我知道还有更多)。Firebug Lite 只显示一个条目。有问题的页面在这里http://www.climatexchange.org.uk/adapting-to-climate-change/,尽管它发生在整个网站上。

有任何想法吗?这似乎不是 CSS 问题,因为节点没有物理添加到 DOM,所以我认为这一定是问题append(),但我看不出模板生成的代码有任何无效(这似乎是 IE8 绊倒的一种情况append()

编辑:问题出在模板功能上,而不是append(). 如果我删除测试

    if (obj.status != '') {
        template += ' | <span class="status">'+obj.status+'</span></div>';
    }

它在 IE8 中运行良好。我现在很难找到适用于 IE8 的测试(所有其他浏览器似乎都可以测试空字符串)。

4

2 回答 2

0

我有一个</div>在测试中以及一个在它之外,所以模板生成的标记是无效的。IE8 会出现无效标记,而更好的浏览器则更宽容。

于 2013-07-17T09:44:17.280 回答
0

你确定吗,obj总是有一个属性status。你能检查一下吗:

if ( ( obj.status != "undefined" ) && ( obj.status != '' ) ) {
    template += ' | <span class="status">'+obj.status+'</span></div>';
}
于 2013-07-17T09:40:11.453 回答