我有一个脚本,它通过 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 的测试(所有其他浏览器似乎都可以测试空字符串)。