Frage

Hallo alle Ich bin nicht sicher, wie dieses Problem zu nähern. Ich habe eine Funktion, die ein Array von HTML img Elementen übergeben wird. Es Schleifen durch diese Bilder das SRC-Attribut für Bilder mit einem leeren „kein Bild“ Daumennagel zu überprüfen. Es führt dann eine Bildsuche des img-Tags ALT-Attribut als die Abfrage verwendet wird. Die Callback-Funktion auf der Suche ersetzt dann die IMG SRC mit dem ersten Bildergebnis.

Ich habe Probleme das richtige Bild mit dem entsprechenden Such Rückruf passend auf. Im Moment bin ich Erstellen nur Arrays und Anpassung der zurück Suche mit einem Index für die Bilder. Da die mehrere Suchvorgänge gleichzeitig ausgeführt werden, abhängig von der Größe des Bildes oder Netzwerklatenz kann er den Anruf aus, um Feuer zurück und die Bilder mischen.

Ich brauche einen Ansatz, den ich paare individuelle Suche mit HTML-Elementen kann. Wäre dies möglich, einen searchController und mehr Objekte mit image?

Im Folgenden finden Sie ein Beispiel für die Funktion verwende ich

google.load('search', '1');

function googleFillBlanks(jqueryImages){

  //namePairs holds the images matching alt text and attachedCount is used for matching up once the call back is fired
  var attachedCount = 0;
  var namePairs = [];

  function searchComplete(searcher){
    if (searcher.results && searcher.results.length > 0) {
       var results = searcher.results;
       var result = results[0];
       $("img[alt='"+namePairs[attachedCount]+"'] ").attr('src', result.tbUrl);
       //jqueryImages.get(0).attr('src', result.tbUrl);
       attachedCount++;
    }
  }

   var imageSearch = new google.search.ImageSearch();

    //restrict image size
    imageSearch.setRestriction(google.search.ImageSearch.RESTRICT_IMAGESIZE,
                               google.search.ImageSearch.IMAGESIZE_SMALL);

    imageSearch.setSearchCompleteCallback(this, searchComplete, [imageSearch]);

  jqueryImages.each(function(){
    if($(this).attr('src').substr(-12,8) == 'no_image')
    { 
      namePairs.push($(this).attr('alt'));
      imageSearch.execute($(this).attr('alt'));
    }
  });
}
War es hilfreich?

Lösung

Dies ist, was ich am Ende umhüllen führt einer interessiert ist und für die Selbsterinnerung

google.load('search','1');
function checkImages(){

 // Here is the closure!
 var myClosure = function(img){return function(){
  if(this.results&&this.results.length>0){
   var result = this.results[0];
   img.src = result.tbUrl;
   img.alt = result.titleNoFormatting;
  }
 }};

 var imgs = document.getElementsByTagName('img');
 for(var i=0;i<imgs.length;i++){
  var img=imgs[i];
  if(img.src.match(/no_image.{4}/)){
   var is = new google.search.ImageSearch();
   is.setSearchCompleteCallback(is, myClosure(img));
   is.execute(img.alt);
  }
 }
}
google.setOnLoadCallback(checkImages);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top