2017-02-06 1 views
1

Ich habe eine wirklich harte Zeit, dies zu verstehen. Ich wähle alle Image-Tags basierend darauf, ob sie das Wort /resize/ in der Quelle des img-Tags haben (ich denke, dass es ein Array zurückgibt ...?). Dann möchte ich jedes src überprüfen, um zu sehen, ob es eine Datei gibt, die in der src-Position dieses img-Tags angegeben ist. Wenn das Bild existiert, möchte ich dieses Bild aus dem Array herausziehen, aber es wird nicht entfernt. Es sagt auch Uncaught TypeError: images.indexOf is not a function.ziehen Sie ein Objekt aus einem Objekt-Array in jQuery

Hier ist mein Code -

var images = []; 
var images = $(' img[src*="/resize/"]'); 

console.log(images); 

$.each(images, function(key, value){ 
    var getFile = $(value).data('src'); 
    $.ajax({ 
     type: 'HEAD', 
     url: getFile, 
     success: function() { 
      var index = images.indexOf(key); 

      if (index > -1) { 
       images.splice(index, 1); 
      } 
     }, 
     error: function() { 

     } 
    }); 
    x++; 
}); 

Kann jemand bitte helfen? Das bringt mich um ...

+0

Wissen Sie, welche Art von 'Bildern'? Es hat keine 'indexOf' Methode. – dfsq

+1

Also am Ende möchten Sie eine Sammlung von Bildern haben, die keine entsprechende Datei auf dem Server hat? – dfsq

+0

Im Wesentlichen ja dsfq. Alle Bilder existieren bereits in '/ files /'. Was ich tun möchte, ist zu überprüfen, ob es nicht in '/ resize/files /' existiert, wenn es dann nicht ein refaktoriertes Array mit allen Bildern macht, die '/ resize /' in src und don haben Wenn du noch nicht in diesem Verzeichnis bist, nimm die orginalen Bilddateien von '/ files /' und führe ein Ajax-Crop-Skript aus und mache es in '/ resize/files' existieren. –

Antwort

1

Der $ (oder jQuery) -Konstruktor gibt ein jQuery-Objekt zurück. jQuery Objekte verhalten sich ähnlich wie ein Array mit einer Länge, in Scheiben schneiden Verfahren etc. sowie Elemente 0 indiziert, 1, 2 ... usw.

Aber ein jQuery-Objekt ist nicht ein wahres Javascript Array und hat nicht viele die Array-Methoden wie join, reverse oder in Ihrem Fall indexOf.

Stattdessen können Sie die index Methode verwenden. Read more about it on jQuery API Documentation

+0

Es ist kein 'Array', nein, wie gesagt, es verhält sich wie eins, und Sie können tatsächlich Array-Methoden auf einem jQuery-Objekt (' Array.prototype.forEach.call (y => console.log (y))} aufrufen). Sie treffen tatsächlich häufig Array-ähnliche Objekte. Wenn Sie 'document.querySelectorAll' verwenden, wird eine' NodeList' zurückgegeben, die keine Array-Methoden hat. Doing 'Array.prototype.slice.call (nodeList, 0)' gibt es als ein echtes Array zurück (auf dem wir dann mappen, filtern, reduzieren usw.) EDIT: Scheint so, als hätte der Typ, zu dem ich kommentierte, seinen Kommentar gelöscht, aber ich werde das hier lassen. – Phillip

Verwandte Themen