如何使用 Jquery/Javascript 将我的一个文件夹中的所有图像加载到我的网页中

IT技术 javascript jquery html image
2021-02-08 13:12:13

我在我的 .js 文件所在的目录中有一个名为“images”的文件夹。我想使用 Jquery/Javascript 将“图像”文件夹中的所有图像加载到我的 html 页面中。

由于图像的名称不是一些连续的整数,我应该如何加载这些图像?

6个回答

在本地主机和实时服务器上都可以正常工作,并且允许您扩展允许的文件扩展名的分隔列表:

var folder = "images/";

$.ajax({
    url : folder,
    success: function (data) {
        $(data).find("a").attr("href", function (i, val) {
            if( val.match(/\.(jpe?g|png|gif)$/) ) { 
                $("body").append( "<img src='"+ folder + val +"'>" );
            } 
        });
    }
});

注意

Option Indexes默认情况下,Apache服务器已打开 - 如果您使用另一台服务器,例如Express for Node,您可以使用此 NPM 包使上述工作正常工作:https : //github.com/expressjs/serve-index

如果要列出的文件/images不在 server.js 中,则可以添加如下内容:

const express = require('express');
const app = express();
const path = require('path');

// Allow assets directory listings
const serveIndex = require('serve-index'); 
app.use('/images', serveIndex(path.join(__dirname, '/images')));
好吧,它是 JQuery man ,而不是 Javascript ,使用这样的总和 $(document).ready(function(){ 这是基本的 jquery 代码编写场所
2021-03-12 13:12:13
有人能解释一下“a”指的是什么吗?我有一个带有 .pngs 的文件夹,但没有得到任何结果。console.log(data)我收到一个很长的 html 文档响应并且图像列表显示在末尾时<script>addRow("image1.png","image1.png",false,"","");</script> <script>addRow("image2.png","image2.png",false,"","");</script>
2021-03-18 13:12:13
在我的情况下不起作用 --- 在 Chrome 中出现错误: file:///<my_path>/images/. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
2021-03-20 13:12:13
这应该是公认的答案..这是真正有效的完美解决方案..而其他人失败了..
2021-03-24 13:12:13
@RokoC.Buljan 我无法让它工作。我在我的 html 文件中的<script></script>标签内使用这个脚本有任何想法吗?
2021-04-03 13:12:13

利用 :

var dir = "Src/themes/base/images/";
var fileextension = ".png";
$.ajax({
    //This will retrieve the contents of the folder if the folder is configured as 'browsable'
    url: dir,
    success: function (data) {
        //List all .png file names in the page
        $(data).find("a:contains(" + fileextension + ")").each(function () {
            var filename = this.href.replace(window.location.host, "").replace("http://", "");
            $("body").append("<img src='" + dir + filename + "'>");
        });
    }
});

如果您有其他扩展名,您可以将其设为一个数组,然后使用in_array().

ps:以上源码未经测试。

某些带有特殊字符的文件名将不会被选中。例如 filename="blk100A#01-01"(不会被选中),但是 filename = "blk100#01-01"(会被选中)(在'#'之前没有'A')..可以帮忙吗?
2021-03-18 13:12:13
大家好,我正在尝试使用相同的示例将 5 个静态文件(保存在单独文件夹中的 5 个不同 html 文件)加载到另一个文件中;但是文件无法在该页面中加载。- 任何建议。
2021-03-26 13:12:13
不要使用 :contains,而是使用过滤器来测试多个扩展名 .find("a").filter(function () {return regexp.test($(this).text());}). 将正则表达式定义为 var regexp = new Regexp("\.png|\.jpg|\.gif");
2021-03-27 13:12:13
我设法this让它在本地像魅力一样工作(运行 IIS Express)和 AJAX 调用(我注销返回完整的“/assets/images/image.jpg”。但是当我将它上传到我的 Apache 服务器时,所有的call ( this) 返回的是“/image.jpg”,导致它在 Apache 主机上不起作用。有什么想法吗?
2021-04-03 13:12:13
这对我有用,但我从 var 文件名中删除了 .host。所以:var filename = this.href.replace(window.location, "")
2021-04-10 13:12:13

这是添加更多文件扩展名的方法,在本页顶部 Roy MJ 给出的示例中。

var fileextension = [".png", ".jpg"];
$(data).find("a:contains(" + (fileextension[0]) + "), a:contains(" + (fileextension[1]) + ")").each(function () { // here comes the rest of the function made by Roy M J   

在这个例子中,我添加了更多的包含。

某些带有特殊字符的文件名将不会被选中。例如 filename="blk100A#01-01"(不会被选中),但是 filename = "blk100#01-01"(会被选中)(在'#'之前没有'A')..可以帮忙吗?
2021-03-23 13:12:13

这是一种方法。也涉及做一点 PHP。

PHP部分:

$filenameArray = [];

$handle = opendir(dirname(realpath(__FILE__)).'/images/');
        while($file = readdir($handle)){
            if($file !== '.' && $file !== '..'){
                array_push($filenameArray, "images/$file");
            }
        }

echo json_encode($filenameArray);

jQuery 部分:

$.ajax({
            url: "getImages.php",
            dataType: "json",
            success: function (data) {

                $.each(data, function(i,filename) {
                    $('#imageDiv').prepend('<img src="'+ filename +'"><br>');
                });
            }
        });

所以基本上你做一个 PHP 文件以将图像文件名列表返回为 JSON,使用 ajax 调用获取该 JSON,并将它们添加/附加到 html。您可能想要过滤从文件夹中抓取的文件。

1开始对 php 部分有一些帮助

如果有兴趣在没有 jQuery 的情况下执行此操作 - 这是目前最受好评的答案的纯 JS 变体(来自此处):

var xhr = new XMLHttpRequest();
xhr.open("GET", "/img", true);
xhr.responseType = 'document';
xhr.onload = () => {
  if (xhr.status === 200) {
    var elements = xhr.response.getElementsByTagName("a");
    for (x of elements) {
      if ( x.href.match(/\.(jpe?g|png|gif)$/) ) { 
          let img = document.createElement("img");
          img.src = x.href;
          document.body.appendChild(img);
      } 
    };
  } 
  else {
    alert('Request failed. Returned status of ' + xhr.status);
  }
}
xhr.send()