実行順にGoogle画像検索を同時に注文する方法は?
-
07-07-2019 - |
質問
こんにちは、私はこの問題にどのように取り組むべきかわかりません。 HTML img要素の配列が渡される関数があります。空白の「画像なし」を使用して画像のSRC属性をチェックし、これらの画像をループします。親指の爪。次に、imgタグのALT属性をクエリとして使用して画像検索を実行します。検索のコールバック関数は、Img SRCを最初の画像結果に置き換えます。
正しい画像と対応する検索コールバックのマッチングに問題があります。現在、配列を作成し、返された検索を画像のインデックスと照合しています。複数の検索が同時に実行されるため、画像のサイズやネットワークの待ち時間に応じて、コールバックが順番どおりに実行されず、画像が混同される可能性があります。
個々の検索とhtml要素をペアにするアプローチが必要です。これはsearchControllerと複数のimageSearchオブジェクトを使用して可能ですか?
以下は、私が使用している関数の例です
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'));
}
});
}
解決
これは、いずれかが興味を持っていることと自己啓発のために私がやったことです
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);
所属していません StackOverflow