0

我的脚本中有以下行,基于从 JSON 检索到的新闻提要数据构建一个字符串:

 var buildstring = "<table><tr><img src=" + obj.value.items[x]["media:content"].url + "> <b>" + obj.value.items[x].title + "</b><br /><td>" + obj.value.items[x].description.content + "</td></tr></table><br />";

一般来说,它工作正常 - 除了一件事。有时正在解析的提要没有与特定标题和描述相关联的图像文件,在这种情况下,整个脚本都会失败。

有没有办法让脚本跳过提要中任何缺失的项目并从那里的项目构建字符串?例如,如果一个故事没有图像文件,字符串只包含标题和描述?在典型情况下,我会拍摄 5 到 10 个故事——如果它们都具有 3 个元素(图像、标题和 description.content),那就没问题了。如果一个故事缺少图像文件,我将一无所获。

感谢您的任何建议或帮助。

编辑:

更完整的代码:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"> </script><script type="text/javascript">

function pipeCallback(obj) {
document.write("<div id=testdiv><b>LATEST NEWS</b><hr>");
var x;
for (x = 0; x < obj.count ; x++)
{
var imageurl = obj.value.items[x]["media:content"].url ? obj.value.items[x]["media:content"].url : "http://static.jquery.com/org/images/project/jquery-project-sm.png";
var buildstring = "<table><tr><img src=" + imageurl + "> <b>" + obj.value.items[x].title + "</b><br /><td>" + obj.value.items[x].description.content + "</td></tr></table><br />";
document.write(buildstring);
buildstring = null;
}
document.write("</div>");

}
</script>
4

2 回答 2

0

您可以使用三元表达式来构建字符串:

var textOnly = "<b>" + obj.value.items[x].title + "</b><br /><td>" + obj.value.items[x].description.content + "</td></tr></table><br />";
var buildstring = (typeof obj.value.items[x]["media:content"] == 'undefined') ? 
    "<table><tr><td><img src=" + obj.value.items[x]["media:content"].url + "></td>" + textOnly 
    : "<table<tr><td></td>" + textOnly;

显然,这变得非常丑陋、快速,这就是他们发明客户端模板的原因(JQuery 模板Underscore.jsMustache.jsHandlebars.js等,任你选择)。

这些允许您将数据与标记分开,因此您可以编写如下内容:

var template = "<table><tr><td><img src='{{ image }}' /></td><td>{{ title }}</td><td>{{ description }}</td></tr></table>";

您可以从数据 + 模板中获取 HTML:

var html = Mustache.render(template, obj.value.items[x]);
于 2012-08-31T04:06:47.637 回答
0

最好的选择就是简单地包含占位符,对吗?因此,如果没有图像,则会出现占位符...

这将是这样实现的:

var imageurl = obj.value.items[x]["media:content"].url ? obj.value.items[x]["media:content"].url : "http://link.to.default/image.png";
var buildstring = "<table><tr><img src=" + imageurl  + "> <b>" + obj.value.items[x].title + "</b><br /><td>" + obj.value.items[x].description.content + "</td></tr></table><br />";
于 2012-08-31T04:10:05.593 回答