0

私は週末のプロジェクトとしてjsベースのepubリーダーを作成しており、本の各ページの画像のsrc属性を画像のURLからepubzipから読み込まれたデータURIに変更しようとしています。これが私の関数です:

//page contents is just an html string of the book's page
pageContents = GlobalZipLoader.load('epub.zip://' + pageLocation);
pageContents = replaceImages(pageContents)

...

function replaceImages(pageContents){
  $(pageContents).find('img').each(function(){
    var domImage = $(this);

    //this is something like ".../Images/img.jpg"
    var imageLocation = domImage.attr('src'); 

    //this returns the proper data-uri representation of the image
    var dataUri = GlobalZipLoader.loadImage('epub.zip://' + imageLocation);

    //this doesn't seem to "stick"
    domImage.attr('src', dataUri);
  });
  return pageContents;
}

replaceImages関数から返されたpageContentsには、まだ古いsrc属性があります。必要に応じて詳細を提供できますが、ご協力いただければ幸いです。

システム再起動とIliaGのおかげで正解:

function replaceImages(pageContents) {
    newContent = $(pageContent);
    ... manip ...
    return newContent;
}
4

3 に答える 3

2

クローンを作成する必要はありません。を設定し、pageContents = $(pageContents);で画像の置換を実行するだけです。pageContentsreturn pageContents.html();

于 2012-05-13T18:44:31.703 に答える
1

src画像の読み込みが完了したら、画像を変更してみてください。

そして、これは機能的に起こっていると思いloadImageます。

あなたの更新の質問によると:

何もいらないclone()と思います。変数に格納pageContentsしてそのtempContents変数を使用するだけです

于 2012-05-13T18:21:12.463 に答える
1

pageContentsは単なる文字列であるため、変更されたバージョンを返す必要があります。これを試して:

function replaceImages(pageContents){
  // save jQuery object
  var $pageContents = $(pageContents);

  $pageContents.find('img').each(function(){
    var domImage = $(this);

    //this is something like ".../Images/img.jpg"
    var imageLocation = domImage.attr('src'); 

    //this returns the proper data-uri representation of the image
    var dataUri = GlobalZipLoader.loadImage('epub.zip://' + imageLocation);

    //this doesn't seem to "stick"
    domImage.attr('src', dataUri);
  });

  // return contents of the modified jQuery object
  return $pageContents.html();
}
于 2012-05-13T18:54:24.527 に答える