Question

Bonjour à tous, je ne sais pas comment aborder ce problème. J'ai une fonction qui passe un tableau d'éléments HTML img. Il parcourt ces images en recherchant les images dans l'attribut SRC à l'aide d'un blanc "Aucune image". la vignette. Il exécute ensuite une recherche d'image en utilisant l'attribut ALT des étiquettes img comme requête. La fonction de rappel de la recherche remplace ensuite le CRG Img par le premier résultat d'image.

Je ne parviens pas à faire correspondre la bonne image au rappel de recherche correspondant. En ce moment, je suis en train de créer des tableaux et de faire correspondre la recherche renvoyée à un index pour les images. Étant donné que les recherches multiples sont exécutées simultanément, en fonction de la taille de l’image ou de la latence du réseau, elles peuvent renvoyer l’appel dans l’ordre et mélanger les images.

J'ai besoin d'une approche qui me permet de jumeler des recherches individuelles avec des éléments HTML. Cela serait-il possible d’utiliser un searchController et plusieurs objets imageSearch?

Vous trouverez ci-dessous un exemple de la fonction que j'utilise

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'));
    }
  });
}
Était-ce utile?

La solution

c'est ce que j'ai fini par faire envelopper tout le monde est intéressé et pour rappel de soi

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top