2
[
    {
        "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"); });
4

3 回答 3

4

只要gallery.image并且gallery.video没有其他任何状况都可以解决它。

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

true其次,除非您严格遵守===实际true价值,否则您实际上不需要比较任何东西。只需在条件中单独使用任何真实值即可。

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

于 2012-07-10T21:37:57.377 回答
3
 if(gallery.image) {
 //do stuff with it
 } else if( gallery.video ) {
 //do stuff with video
 }
于 2012-07-10T21:41:35.723 回答
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

于 2012-07-10T21:45:38.763 回答