为什么我的forEach循环不能使用$('img')返回的图像数组?

时间:2017-05-17 23:27:31

标签: javascript jquery

我想保存多个图像的URL(src)但由于某种原因,我的代码没有完成工作。

forEach返回一个图像数组,因此逻辑上(或者我认为).attr('src')循环应记录单个图像(如果我添加function fetchURL() { let imgURLs = [], imgs = $('img'); imgs.forEach(img => { imgURLs.push(img.attr('src')); }); console.log(imgURLs); } ,则记录URL)。但是,这不起作用。为什么呢?

以下是代码的相关部分:

$search = "article awesome";
$search = preg_replace("#\s+#", '%', $search);

3 个答案:

答案 0 :(得分:2)

请改用:

    var imgs = document.getElementsByTagName("img");
    var imgSrcs = [];

    for (var i = 0; i < imgs.length; i++) {
        imgSrcs.push(imgs[i].src);
    }

    console.log(imgSrcs);
<img src="https://www.nationalgallery.org.uk/server.iip?FIF=/fronts/N-6600-00-000037-WZ-PYR.tif&CNT=1&JTL=1,0">
<img src="https://www.nationalgallery.org.uk/server.iip?FIF=/fronts/N-6600-00-000037-WZ-PYR.tif&CNT=1&JTL=1,0">
<img src="https://www.nationalgallery.org.uk/server.iip?FIF=/fronts/N-6600-00-000037-WZ-PYR.tif&CNT=1&JTL=1,0">

答案 1 :(得分:1)

forEach是一个javascript本机函数,而$('img')返回一个jQuery对象。

如果您想使用它,请使用$('img').toArray();,它将适用于forEach。

其次将imgURLs.push(img.attr('src'));更改为imgURLs.push($(img).attr('src'));,因为vanilla javascript没有attr

function fetchURL() {
    let imgURLs = [],
        imgs = $('img').toArray();

    imgs.forEach(img => {
        imgURLs.push($(img).attr('src'));
    });

    console.log(imgURLs);
}

fetchURL();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img src="sdfsdf" />
<img src="32442sdf" />
<img src="sdfs343sdfds" />

答案 2 :(得分:0)

之前我没有使用forEach但是在jquery中你可以使用.each()

function fetchURL() {
    var imgURLs = [],
        imgs = $('img');

    imgs.each(function(){   // or $.each(imgs , function(){
        var This_Src = $(this).attr('src');
        imgURLs.push(This_Src);
    });

    console.log(imgURLs);
}