在同一标签中显示图像或swf

时间:2012-01-18 07:24:40

标签: javascript jquery html5

我的网页通过AJAX调用从XML获取内容。我从该XML检索URL并使用它在页面上创建一个元素。

但该网址可能如下所示:

  • http://something/something.jpg
  • http://something/something.swf

这意味着它可以是图像文件,也可以是.swf文件,因此我无法在同一标签(也是动态创建)中显示该图像或.swf文件。

我不知道如何在同一个标​​签中同时显示图像和.swf文件。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

为什么不在创建标记之前检查URL?您可以使用regular expression,如下所示:

var url     = 'http://something/something.swf';
var matches = url.match(/(swf|jpg)$/i);

if (matches.length > 0) {
    var type = matches[0].toLowerCase();
    /* create the img or embed tag, based on `type` */
}

正则表达式中的i使其匹配,无论大小写如此(因此它也匹配“something.SWF”)和toLowerCase确保我们可以将它与小写字符串进行比较(例如if (type === 'swf') { })。

现在您可以使用结果创建正确的标记,如下所示:

var url     = /* extracted from XML, e.g.: */ 'http://something/something.swf';
var matches = url.match(/(swf|jpg)$/i);

if (matches.length > 0) {
    var type = matches[0].toLowerCase();
    var tag;

    // Create the correct tag:
    if (type === 'swf') { 
        tag = $('<embed type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" />');
    }
    else if (type === 'jpg') {
        tag = $('<img />');
    }

    // Set the src and append to <body>:
    if (tag !== undefined) {
        tag.attr('src', url);
        tag.appendTo('body');
    }
}

请记住,此示例未经测试。例如,您可能需要在height标记上设置width<embed>


注意:match返回一个包含整个匹配的数组,以及任何匹配的组。在这种情况下,数组将如下所示:['jpg', 'jpg']。这是因为保存的组(jpg|swf)以及完整匹配。如果您需要阻止此行为,可以使用非捕获组,如下所示:(?:jpg|swf),以便不会记住该组。