jQueryを使用して背景のURLを取得し、img要素に表示する方法

このQ&Aのポイント
  • jQueryを使用して、あるブロック要素の背景画像のURLを取得し、img要素のsrc属性に設定して表示する方法について教えてください。
  • ブラウザによって取得される背景画像のURLの形式が異なるため、iOSデバイスでは背景画像が表示されない問題が発生しています。
  • 原因や他の方法があれば教えていただきたいです。
回答を見る
  • ベストアンサー

jQuery 背景のURLを取得しimgで表示

スマホサイトの作成をしています。 やりたい事は、タイトル通りで jQueryを使って、 あるブロック要素の背景画像のURLを取得し、 そのデータをimgのsrc属性に入れて imgとして表示したいと考えております。 補足としいて ・imgは、同じブロック要素内に表示します。 ・取得するbackground-imageは絶対パスで書かれているものです。 スクリプトは以下のように書きました。 ---------------------------------------- var bgImg = $("#box").css("background-image"); var bgImgFile = bgImg.substring(5, bgImg.length - 2); $("#box").prepend("<img src='" + bgImgFile + "'>"); //最終的に#boxの背景画像をなくす処理 $("#box").css("background-image","none"); ---------------------------------------- ですが、bgImgの値がブラウザによって違うのです。 alert(bgImg)で確認してみると、下記のようにalert表示されました。 ●Firefoxでは   url("http://****.jpg") ●ios(iphone)では  url(http://***.jpg)  ← " "が付いていない これにより、結果、bgImgFileの値が変わってしまい、 ios(iphone)では背景画像を表示できません。 もし可能であれば、これの原因や、 他にもし方法があれば教えて下さると助かります。 詳しい方、どうぞ宜しくお願いいたします。

  • AJAX
  • 回答数1
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 >もし可能であれば、これの原因や、 >他にもし方法があれば教えて下さると助かります。 ブラウザの仕様で返ってくる値が違うというのが原因です。 取得したパスからURLのみ取得してあげるようにすれば良いと思います。 ==== 動作サンプル http://hppg.moe.hm/okwave/qa/q7410650/ ==== JavaScript $().ready ( function() { $('#box'). append ( $('<img />').attr('src',$('#box').css('background-image').match(/https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:@&=+$,%#]+[a-z]/g)) ). css ( 'background-image', 'none' ); }); 多分これで動くと思いますが、iphoneを持っていないので確認取れていません。

mc0816
質問者

お礼

こんばんは LancerVIIさん、いつもありがとうございます。 またまた、お世話になってしまいました。 感謝です~。 URLのみ取得ですね。 そっか~なるほど。 ちょっと、まだ確認できていないですが、 スクリプトを参考にやってみます。 まずは御礼まで。 ありがとうございました。

mc0816
質問者

補足

御礼2回目です。 LancerVIIさんのアドバイスどおりに、実装、確認し 無事に期待通りできました! あらためて御礼申し上げます。 ただ、正規表現た難しいですね。 参考書をひもとき、調べていますが…分からない部分が多いです。 ここは、もう少し、ひもといてみたいと思います。 サンプルとスクリプト、いつもご丁寧な解説をありがとうございました。

関連するQ&A

  • jQueryで背景画像を変更したい。

    ブロック要素がありまして(下記<div id="box">boxの中身</div>) そのブロック要素の背景画像(背景は動的に生成)を 別の画像に変えたいと思っています。 ※現行のPCサイトのHTMLをいじらずに、スマホ対応しています 背景画像としては、 現在の背景画像⇒haikei.jpg 新しい背景画像⇒haikei_smp.jpg ↑こんな感じで ファイル名の「haikei」の部分は動的に生成しているため可変ですが、 もとの画像に「_smp」が付く画像ファイルを用意して、 対応したい考えています。 特にイベントはなく、loadしたら読み込む予定でいて 以下のように書いたのですが、 PC上のシミュレーターではうまくいくものの、 実際のスマートフォンで確認したら実行できませんでした。 PC上ではエラーもなかったのですが、 背景画像が変わらないといった不具合です。 HTML ---------------------- <div id="box">boxの中身</div> js ----------------------- $(function(){  //mainbgに現在の背景画像を格納  var mainbg = $("#box").css("background-image")    //mainbgを(".")で分割し、bgImgに格納  bgImg = mainbg.split(".");  var img01 = bgImg[0];  var img02 = bgImg[1];  //「_smp」を付与し、smp_mainbgに格納  var smp_mainbg = img01 + "_smp." + img02 ;  //jQueryでbackground-imageを変更操作  $("#box").css("background-image" , smp_mainbg); }); そもそも、この書き方がよいのか分かりませんが もっとスマートの書き方がありましたら 別の方法でも、どうかご教授ください。 どうぞ宜しくお願いいたします。

    • ベストアンサー
    • AJAX
  • jQueryにて背景のURLを取得

    jQueryにて背景のURLを取得しimgを表示する場合で背景を縦横の倍率を50%に縮小するにはjavascriptをどうすればいいのでしょうか? 【javascript】 jQuery(function($){ var ori_img = $("#crop_img"); crop_window.css({'background-image': 'url('+ori_img.attr('src')+')'}); }); 【HTML部分】 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <div id="crop"> <img src="./test.jpg" id="crop_img" alt="" > <div id="crop_window"></div> </div>

    • ベストアンサー
    • AJAX
  • cssで、imgタグに、背景画像を敷きたい

    cssで、imgタグに、背景画像(影)を敷く方法を教えてください。 ※divタグに敷く方法は分かるのですが、imgタグに敷く方法が分かりません。 ■現状 <HTML> <div id="hoge"> <img src~ <CSS> #hoge img { background-image:url(/images/background_shodow.jpg); background-repeat: none; background:position: ? width:? height:? margin:? padding:?; <影の大きさ> ・width400px ・height200px <写真のサイズ指定> ・width390px ・height190px ※これまでは、 写真のサイズが違うので、 css部分の#hoge img で、 画像の大きさを強制指定してました。 出来れば、 画像の大きさは、html側で指定せずに、 css側で調整したいです。 ムリなら、html側で大きさ指定します。 div枠にcss設定できれば早いかと思いますが、 それが出来ないため(img タグにしかcss指定不可)の相談です。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • jQueryでCSSの背景画像を切り替えたい

    見出しをクリック後にCSSで指定している背景画像を変えるため、jQueryでCSSを変更させてみたところ上手くいきません。 jQueryで指定する変更後の背景画像を絶対パスに換えたら上手くいったので、 パスの指定方法が悪いところまでは分かったのですが、相対パスでの指定方法がわからなくなりました。 WordPress環境で下記のコードを使用しています。 ご教授の程、よろしくお願い致します。 【 jQuery】 ○ディレクトリ : テーマフォルダ/js/change.js jQuery(function() { jQuery("h3 div.class").hide(); jQuery("h3").click(function() { jQuery(this).next().slideToggle("fast"); jQuery(this).css("background-image" , "url('img/pic2.jpg')"); }); }); 【CSS】 ○ディレクトリ : テーマフォルダ/style.css h3 { background: #7c8187; background-image: url(img/pic.jpg); cursor: pointer; } 【画像】 ○ディレクトリ : テーマフォルダ/img/pic.jpg テーマフォルダ/img/pic2.jpg

    • ベストアンサー
    • CSS
  • css 画像を表示・設定

    cssでimgタグを使って画像を表示させたいのですが、 css内でsrcは使えないのでしょうか? img{ background-image:url( http://orange.jpg ) } このような書き方しかできないのでしょうか? 上記の書き方だと、画像の周りに線ができて、更にhtmlソース内のaltの文字まで表示されてしまいます。

    • ベストアンサー
    • HTML
  • セルの背景画像ランダムチェンジがうまくいきません!

    過去の質問などを参考にセルの背景画像のランダムチェンジのソースを作りましたがうまく表示されません!何かアドバイスがあれば是非お願いします。 <head> <script language="javascript"> var BGimg=new Array(); BGimg[0]="image/01.gif"; BGimg[1]="image/02.gif"; var img_pcs=BGimg.length;//画像の数 var rdm_num=Math.floor(Math.random()*img_pcs);//乱数 function chg_BGimg(){ document.getElementById("changeIMG").style.backgroundImage="url('"+BGimg[rdm_num]+"')"; } </script> </head> <body onload="chg_BGimg();"> <table bgcolor="#333333"> <tr> <td id="changeIMG" style="background-image:url('image/first.gif');">このセルの背景が変わります</td> <td>blank</td> <tr> </table> </body> (実際のテーブルは列11×行9です。) 以上がソースです。どうも初期設定のfirst.gifが一瞬だけ表示されて、あとはテーブルの背景色になり、何も画像が表示されてず、「×」マーク(画像が見つからなかった場合にでるアイコン)もないのです。 このソースの改良点または、全く違う方法でも結構です、何かアドバイスがあれば是非お願いします。よろしくお願いします!

  • ネスケで背景を表示する際に

    ネスケで背景を指定する際に、困ったことが起きてしまいます。まず横700のテーブルのTDに指定して貼り付けますが 、そのうえからまたテーブルを組んで、セルを作ると、背景が繰り返してしまいます。CSSで定義してますが、できません。この教えて・・・でも同じような質問があったのですが、真似しても、テーブルのみだったら背景はきっちり表示されますが。リピート禁止にしてもだめです。 cssはこうです。 <STYLE TYPE="text/css"> .img01{ background-image:url(img/back01.jpg); background-repeat:no-repeat; background-position:50% 50%; } </STYLE> できれば、cssでなくタグのみでできればいいのですが・・・

  • スタイルシートで、背景画像が表示されない

    スタイルシートで、背景画像(header.jpg')を設定してるのですが表示されません。  --- style.css     newpage5.html  --- img ┐        header.jpg スタイルシートは border-bottom: 1px solid #FF9900; background-image: url('img/header.jpg'); padding: 20px; ホームページビルダーでは、簡易表示されてるんですが アップロードすると、画像が表示されないのですが・・・ 以上宜しくお願いします。

    • ベストアンサー
    • HTML
  • 背景画像がNetscapeでは表示されない

    <HEAD>タグ内に下記の方法で背景画像を中央に表示させています。 IE5.5では正常に表示されますが、ネスケ4.7で確認すると背景画像のみ表示されません。 <BODY>タグ内の文字は正常に表示されます。 どうしたら良いでしょうか? <STYLE type="text/css"> <!-- table#base { background-image: url("img/bg.jpg"); background-repeat:no-repeat; background-position: center center; } --> </STYLE> 宜しくお願いします。

    • ベストアンサー
    • HTML
  • JQueryによるclass名での背景切り替え

    下記ソースでおかしな挙動がでているので質問させて頂きます。 jQuery導入済みで2つのブロックの背景に同じクラス名を指定した上で背景を一定時間ごとに切り替えているのですが、指定していたクラスタをid名からclass名に変えただけで切り替えがおかしくなりました。 id名のとき 00→01→00→01→00→01→…… class名のとき 00→01→00→00→01→01→01→01→…… クラス名にしたことが原因でしょうか? function testBack(obj){ var t = '.changeBg'; if (obj>3){obj=0;} $(t).fadeIn(1000).css('background','url('bg_0'+ obj +'.jpg) center top no-repeat'); obj++; $(t).delay(8000).fadeOut(1000,function(){ setTimeout('testBack('+obj+')', 100); }); } $(document).ready(function(){ if ($('body').attr('class') != 'testBox'){ testBack(0); var img=new Array(); img[0]=new Image(); img[0].src= rootPath+'commons/images/bg_00.jpg'; img[1]=new Image(); img[1].src= rootPath+'commons/images/bg_01.jpg'; } });

専門家に質問してみよう