按文件类型进行元素预览,例如 [img,video,audio]
make element preview by type of file e.g [img,video,audio]
我正在构建一个网络应用程序聊天,并在其上制作一个上传系统,
首先我制作一张图片input[type="file"]
然后是录制按钮 [upload as wav]
示例:
无论如何,我正在使用 if(condition)
、
查看文件
示例:
if (data.file == 'audio') {
$('<audio style="display:block;width:250px;" controls src="' + data.message + '"></audio>').appendTo($('.messages ul'));
}else if (data.file == 'image'){
$(''<img class="imageChat" ' +
'src="' + filterXSS(data.message) + '"' +
'href="' + filterXSS(data.message) + '"' + '>'
+).appendTo($('.messages ul'));
}
但我需要的是自动检测文件类型并根据文件类型创建元素?
更新:
示例:
showFile('assets/this-is-img.php?a=b') // will return an $('img') element
我知道如何获取文件类型,但我需要将文件类型传递给脚本,它将 return 预览元素,例如照片的 img,PDF 的 iframe,音频的音频,etc
这可能吗?
提前致谢:)
假设用户一次只能上传一个文件,你可以从input[type=file]中得到filelist
document.getElementById("Id of the input").files[0]
。它 returns 一个类型为 属性 的文件对象。希望这有帮助
这是一个非常基本的例子。这里的核心函数是makeElement()
,它将一些基本数据作为对象传递给它,并根据HTML元素创建一个jQuery对象。
繁重的工作由 fileToElem()
完成,它获取有关文件的一些信息,并可以根据文件类型采取一些有条件的操作。如果它看到一个特定的文件并且有一个数据模板。
$(function() {
var files = [{
file: "audio",
message: "assets/this-is-img.php?a=b"
},
{
file: "image",
message: "assets/this-is-img.php?a=b"
}
];
function makeElement(d, t) {
var el = $("<" + d.nodeName + ">", d.attr).prop(d.prop);
if (t != undefined) {
el.appendTo(t);
}
return el;
}
function fileToElem(data, target) {
var item;
switch (data.file) {
case "audio":
item = makeElement({
nodeName: "audio",
attr: {
class: "audioChat",
style: "display:block;width:250px;",
src: data.message
},
prop: {
controls: true
}
}, target);
break;
case "image":
item = makeElement({
nodeName: "img",
attr: {
class: "imageChat",
src: data.message
},
prop: {}
}, target);
break;
case "video":
item = makeElement({
nodeName: "video",
attr: {
class: "videoChat",
src: data.message
},
prop: {
controls: true
}
}, target);
break;
case "pdf":
item = makeElement({
nodeName: "a",
attr: {
class: "pdfChat",
href: data.message,
target: "_BLANK"
},
prop: {}
}, target);
break;
}
// Do other things with 'item' if needed here
}
$.each(files, function(i, data) {
var listItem = $("<li>").data("date", new Date().toString()).appendTo($(".messages ul"));
fileToElem(data, listItem);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="messages">
<ul></ul>
</div>
您可以根据您期望的文件类型向 switch()
添加更多条件。如果您不熟悉 switch()
它是一个复杂的 if 处理程序。
The switch
statement evaluates an expression, matching the expression's value to a case
clause, and executes statements associated with that case, as well as statements in cases that follow the matching case.
查看更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch
希望对您有所帮助。
我正在构建一个网络应用程序聊天,并在其上制作一个上传系统,
首先我制作一张图片input[type="file"]
然后是录制按钮 [upload as wav]
示例:
无论如何,我正在使用 if(condition)
、
示例:
if (data.file == 'audio') {
$('<audio style="display:block;width:250px;" controls src="' + data.message + '"></audio>').appendTo($('.messages ul'));
}else if (data.file == 'image'){
$(''<img class="imageChat" ' +
'src="' + filterXSS(data.message) + '"' +
'href="' + filterXSS(data.message) + '"' + '>'
+).appendTo($('.messages ul'));
}
但我需要的是自动检测文件类型并根据文件类型创建元素?
更新:
示例:
showFile('assets/this-is-img.php?a=b') // will return an $('img') element
我知道如何获取文件类型,但我需要将文件类型传递给脚本,它将 return 预览元素,例如照片的 img,PDF 的 iframe,音频的音频,etc
这可能吗? 提前致谢:)
假设用户一次只能上传一个文件,你可以从input[type=file]中得到filelist
document.getElementById("Id of the input").files[0]
。它 returns 一个类型为 属性 的文件对象。希望这有帮助
这是一个非常基本的例子。这里的核心函数是makeElement()
,它将一些基本数据作为对象传递给它,并根据HTML元素创建一个jQuery对象。
繁重的工作由 fileToElem()
完成,它获取有关文件的一些信息,并可以根据文件类型采取一些有条件的操作。如果它看到一个特定的文件并且有一个数据模板。
$(function() {
var files = [{
file: "audio",
message: "assets/this-is-img.php?a=b"
},
{
file: "image",
message: "assets/this-is-img.php?a=b"
}
];
function makeElement(d, t) {
var el = $("<" + d.nodeName + ">", d.attr).prop(d.prop);
if (t != undefined) {
el.appendTo(t);
}
return el;
}
function fileToElem(data, target) {
var item;
switch (data.file) {
case "audio":
item = makeElement({
nodeName: "audio",
attr: {
class: "audioChat",
style: "display:block;width:250px;",
src: data.message
},
prop: {
controls: true
}
}, target);
break;
case "image":
item = makeElement({
nodeName: "img",
attr: {
class: "imageChat",
src: data.message
},
prop: {}
}, target);
break;
case "video":
item = makeElement({
nodeName: "video",
attr: {
class: "videoChat",
src: data.message
},
prop: {
controls: true
}
}, target);
break;
case "pdf":
item = makeElement({
nodeName: "a",
attr: {
class: "pdfChat",
href: data.message,
target: "_BLANK"
},
prop: {}
}, target);
break;
}
// Do other things with 'item' if needed here
}
$.each(files, function(i, data) {
var listItem = $("<li>").data("date", new Date().toString()).appendTo($(".messages ul"));
fileToElem(data, listItem);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="messages">
<ul></ul>
</div>
您可以根据您期望的文件类型向 switch()
添加更多条件。如果您不熟悉 switch()
它是一个复杂的 if 处理程序。
The
switch
statement evaluates an expression, matching the expression's value to acase
clause, and executes statements associated with that case, as well as statements in cases that follow the matching case.
查看更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch
希望对您有所帮助。