
いつもお世話になっております。
ページの画像をとある条件で変更しようとしております。
HTML5のdata-を利用して変更後の画像のパスをimg要素内に持たせております。
JavaScriptでimg要素を取得し画像の変更は実現できております。
その後もとの画像に戻したいのですが、JavaScriptでimg要素を取得してもsrc属性が変更後の値になっており変更前の値が取得できません。
変更前の値の取得方法を教えてください。
■HTMLソースの一部
<p><img src="img/moto.gif" alt="" data-mimage="img/ato.gif"></p>
■JavaScriptの一部
function wid(){
var image=document.getElementsByTagName('img');
if(window.innerWidth>=320){
for(var i=0;i<image.length;i++){
image.item(i).src=image.item(i).getAttribute("data-mimage");
}
}else{
// ここに元の画像に戻すためのスクリプトを書きたい
}
}
}
wid関数を作ってそのなかでimg要素を取得し、条件を満たしたらすべてのimg要素のdata-mimageの属性値を元のsrc属性に上書きします。
次に条件が満たされていない場合はHTMLにもともと書いてあったsrc属性の属性値をsrc属性値に戻したいのですがこの値が取得できません。
img/moto.gifをimg/ato.gifに変更することは出来ます。
img/ato.gifに変更した後img/moto.gifに戻すことが出来ません。
もちろんdata-mimage2="img/moto.gif"を追加すれば可能なのは分かっていますが、現状のHTMLを変更することなく実現したいです。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
回答No.1のt_ohta様のおっしゃるとおり、
>書き換えてしまったものは取得できません。
ので、
>JavaScriptの変数に残しておくか、書き換える前にJavaScriptで別の属性を作って書き残しておきましょう。
の通り、別途属性を作ってパスを保持しておくのが良いかと思います。
_rakuda_ のサンプルを少し修正させてもらいまして、
下記のような形はいかがでしょうか・・・?
function wid(){
var image=document.getElementsByTagName('img');
if( window.innerWidth>=320 ){
for(var i=0;i<image.length;i++){
// data-prev-imgがない場合、srcの値を data-prev-img に挿入する
if (!image.item(i).getAttribute("data-prev-img")) {
image.item(i).setAttribute('data-prev-img', image.item(i).getAttribute("src"));
}
image.item(i).src=image.item(i).getAttribute("data-mimage");
}
} else {
// ここに元の画像に戻すためのスクリプトを書きたい
// data-prev-imgの値をsrcに挿入する
image.item(i).src=image.item(i).getAttribute("data-prev-img");
}
}
上記の形だと、関数実行時にしか data-prev-img が作られませんので、
data-prev-imgが無い状態で else のほうに入ってきてしまうとエラーが出てしまうので、
onload時などページの読み込みが終わったタイミングで、
data-prev-img の設定を先にしてしまうのが処理の流れ的には良いかもしれないですね。
ご参考になれば幸いです。
複数の方から書き換え前の値は取れないとのご回答で心強いです。
ご回答ありがとうございます。
更にサンプルまでご提示ありがとうございます。
ほぼ同じもので希望の動作になりました。
いきなりelseのほうには言ってきたときの処理は変数flagを作ってifの処理の時にflag=1にして、elseをelse if(flag==1)で対応しました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MFCで画像を表示させているので...
-
imageクラスからiconクラスに変...
-
html内にスライドショーを複数設置
-
libjpegライブラリの使い方につ...
-
MAX関数を使ってからLEFT JOIN...
-
jQueryで特定のURLの時のみ表示
-
あるwebサイト上の画像表示につ...
-
[急ぎ] videoタグで埋め込んだm...
-
スマートフォンサイトに部分的...
-
VBScript+IEのチェックボック...
-
バッチファイルでカウントアッ...
-
重なった画像にクリックイベン...
-
window.openで値の渡し方を教え...
-
【HP作成】クリックすると下...
-
透過pngの透明部分以外をクリッ...
-
初期状態でテーブルの非表示
-
jQueryで画像を重ねる
-
クリックでリンク先の切り替え
-
jQueryでシンプルドラッグドロ...
-
複数の要素を表示してる時だけ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScriptで変更した属性の元...
-
画像が表示でnull; this.src
-
javascriptでのパスについて
-
pythonの構文の基本事項について
-
MFCで画像を表示させているので...
-
pythonのpygameでキャラクター...
-
Vb.net2005での画像の合成方法
-
nodejsの画像表示は特別なこと...
-
セグメンテーション違反なって...
-
HTMLからimgのsrcのみを正規表...
-
error LNK2019 未解決のシンボ...
-
エクセル スクレイピングについて
-
ラズパイでno module named zbar
-
jQuery 複数のfind()
-
OpenCV での画素値の比較について
-
外部javascriptの重複を防ぐには
-
jqueryのimgpreviewというプラ...
-
jQueryで画像がちゃんとプリロ...
-
imageクラスからiconクラスに変...
-
html内にスライドショーを複数設置
おすすめ情報