我的网页通过AJAX调用从XML获取内容。我从该XML检索URL并使用它在页面上创建一个元素。
但该网址可能如下所示:
http://something/something.jpg
,http://something/something.swf
这意味着它可以是图像文件,也可以是.swf文件,因此我无法在同一标签(也是动态创建)中显示该图像或.swf文件。
我不知道如何在同一个标签中同时显示图像和.swf文件。我该如何解决这个问题?
答案 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)
,以便不会记住该组。