如果JSON中存在Value,请检入jQuery

时间:2012-07-10 21:34:18

标签: javascript jquery json

[
    {
        "link"  : "images/examples/image-3.png", 
        "image" : "images/examples/image-3.png", 
        "title" : "copy"
    },
    {
        "link"  : "images/examples/image-3.png", 
        "video" : "video placeholder", 
        "title" : "copy"
    }               
]

在这个例子中,我想要一个条件,说明这个值是"视频"如果价值是"图像"这样做......但我似乎无法处理"视频"或"图像"。

这是我的功能:

$.getJSON("javascripts/media.json", function(data) {                            
    $("<ul class='gallery'></ul>").prependTo("#content");

    for (var i=0; i<data.length; i++) {
        var gallery = data[i];

        //alert(data[1]);
        if (gallery.image = true) {
            $(
            "<li class='image'>" +
                "<a class=\"imageLink\" href='" + gallery.link + "' rel=\"lightbox[gallery]\">" + 
                    "<img src=" + gallery.image + " alt=" + gallery.title + ">" +
                "</a>"
            + "</li>").appendTo(".gallery");    
        }
        else if (gallery.video = true) {
            $(
            "<li class='video'>" +
                "<a class=\"videoLink\" href='" + gallery.link + "' rel=\"lightbox[gallery]\">" + 
                    "<img src=" + gallery.video + " alt=" + gallery.title + ">" +
                "</a>"
            + "</li>").appendTo(".gallery");    
        }

    }
}).error(function() { alert("error"); });

3 个答案:

答案 0 :(得分:4)

只有gallery.imagegallery.video没有任何其他条件才能修复它。

您的第一个问题是您使用单= - 分配,而不是=====的比较。这使得第一次(图像)检查始终成功,并且还会使用值true覆盖您存储在其中的图像链接。

其次,除非您使用真正true值严格===,否则您不需要与true进行比较。只需在条件中使用任何truthy值。

最后,你实际操作对象。一旦jQuery为您解码JSON,这就不再与JSON有任何关系了。

答案 1 :(得分:3)

 if(gallery.image) {
 //do stuff with it
 } else if( gallery.video ) {
 //do stuff with video
 }

答案 2 :(得分:2)

检查属性是否存在的规范方法 - 为特定对象定义 - 使用typeof运算符并使用身份比较运算符"undefined"检查字符串===!==

像这样:

if (typeof gallery.image !== "undefined")
   // image code
else if (typeof gallery.video !== "undefined")
   // video code

如果image 属性为gallery,则typeof gallery.image将始终为"undefined"。使用其中一个标识运算符而不是标准的相等运算符可以避免由于静默类型转换而导致的问题。

其他方法存在许多不一致/问题。

您自己的代码只是为image测试中的if属性赋值。