JavaScriptセットimg src


95

おそらく私は単純なものを見逃しているかもしれませんが、あなたが読んだものがすべてうまくいかない場合、それはかなり迷惑です。動的に生成されたページの過程で何度も複製される可能性のある画像があります。したがって、当然のことは、プリロードして、その1つの変数を常にソースとして使用することです。

var searchPic;
function LoadImages() {
    searchPic = new Image(100,100);
    searchPic.src = "XXXX/YYYY/search.png";
    // This is correct and the path is correct
}

それから私は使用して画像を設定しました

  document["pic1"].src = searchPic;

または

  $("#pic1").attr("src", searchPic);

私は私が得る画像を照会するときただし、画像はFirebugのに適切に設定されることはありません[object HTMLImageElement]ようsrc、画像の

IEで私は得る:

http://localhost:8080/work/Sandbox/jpmetrix/[object]

回答:


95

これを使用してsrcを設定する必要があります。

document["pic1"].src = searchPic.src;

または

$("#pic1").attr("src", searchPic.src);

57

imgタグをadd attributes手動で作成する純粋なJavaScript

var image = document.createElement("img");
var imageParent = document.getElementById("body");
image.id = "id";
image.className = "class";
image.src = searchPic.src;            // image.src = "IMAGE URL/PATH"
imageParent.appendChild(image);

ソースを設定 pic1

document["#pic1"].src = searchPic.src;

またはgetElementById

document.getElementById("pic1").src= searchPic.src;

これをアーカイブするj-Query、

$("#pic1").attr("src", searchPic.src);

6
document.getElementById( "pic1")#なし
Gianluca Demarinis

6

画像コンストラクターのインスタンスは、どこでも使用することを想定していません。単にを設定しsrc、画像をプリロードするだけで、ショーは終わりです。オブジェクトを破棄して次に進むことができます。

document["pic1"].src = "XXXX/YYYY/search.png"; 

あなたがすべきことです。引き続き画像コンストラクタを使用して、のonloadハンドラで2番目のアクションを実行できますsearchPic。これにより、src実際のimgオブジェクトにを設定する前にイメージがロードされます。

そのようです:

function LoadImages() {
    searchPic = new Image();
    searchPic.onload=function () {
        document["pic1"].src = "XXXX/YYYY/search.png";
    }
    searchPic.src = "XXXX/YYYY/search.png"; // This is correct and the path is correct
}

onload()でsrcを設定すると、サーバーをハンマーする無限ループが発生します。つまり、srcがロードされると、onloadが呼び出されます。
David Newcomb 2013年

loadイベントは1回しか起動できないため、他に問題があります。ソースを同じ画像に設定しても、再び起動することはできません。
ブルトン語

1
そうです、「XXXX / YYYY / search.png」がウェブカメラの写真またはサーバー側で変更されるものである場合の奇妙なキャッシュの問題について説明する他のSO記事があります。リンクを「XXXX / YYYY / search.png?t = <thedate>」に変更するよう提案されました。あなたの解決策は最も素晴らしくて最もきれいだったので、私は2つを組み合わせて、それがサーバーをハンマーしました。
David Newcomb 2013

@DavidNewcomb Yikes!それはトリッキーです。その場合、私は新しいImage()部分を捨て、代わりに2つの実際のdom画像(ダブルバッファーのような)を使用すると思います。image1を非表示、image2を非表示。インターバルタイマー:image1でsrcを設定し、image1.onloadでshow 1、hide 2を設定します。インターバルファイア:image2でsrcを設定します。image2.onload、show 2で、1を非表示にします。待機、間隔で起動:image1でsrcを設定します。image1.onload、show 1、hide 2-などで...
ブルトン語

5

また、これを解決する1つの方法はdocument.createElement、html imgを使用して作成し、このように属性を設定することです。

var image = document.createElement("img");
var imageParent = document.getElementById("Id of HTML element to append the img");
image.id = "Id";
image.className = "class";
image.src = searchPic.src;
imageParent.appendChild(image);

備考:ワンポイントはJavascriptコミュニティは今使用ドキュメントセレクターなどに開発を奨励することでquerySelectorgetElementByIdgetElementsByClassNameいうより、文書[「PIC1」]。



1

まったく新しい画像を作成する必要はありません... src属性は文字列値を取るだけです:-)


1
JavaScriptを使用してページを動的に生成する場合は、ページのロード時に画像をダウンロードして、必要な要素を初めて作成するときに煩わしい遅延が発生しないようにする必要があります。これがImageオブジェクトを作成する理由です。
tvanfosson 2009

あなたの言う通り、私は私の答えをあまり正確にはしていませんでした。私はsrc属性が文字列を取ることを意味しImage、事前にon を作成することのキャッシュの利点を完全に忘れていました。ありがとう!
JorenB

0

設定する必要があります

document["pic1"].src = searchPic.src;

searchPic自体はImage()であり、設定したsrcを読み取る必要があります。


0

JavaScriptで作成した画像全体になるようにsrc要素を設定しているため、srcプロパティはオブジェクトです。

試す

document["pic1"].src = searchPic.src;

0

うわー!あなたが使用した場合src、その後srcのは、searchPicまた、使用する必要があります。

document["pic1"].src = searchPic.src

良く見える


0

WinJSを使用している場合はsrcUtilities関数を使用してを変更できます。

WinJS.Utilities.id("pic1").setAttribute("src", searchPic.src);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.