2017-10-02 4 views
1

すべてのクラス名が同じdivの束の背景画像を設定しようとしています。しかし、私は各部門が異なる背景イメージを持つようにしたい。ここに私が思い付いたものです:JavaScriptを使用してdivのデータフィールドに従って画像の背景を設定します。

HTML:

<div class="element-item" data-img="imageName.svg"> 
    <h3 class="name">Name</h3> 
    <p class="symbol">&</p> 
    <p class="number">#</p> 
</div> 

はJavaScript:

$(document).ready(function(){ 
// DOM is ready here 

    $("div.element-item").each(function(){ 

     $(this).css({"background-image", "url("+"/path/[data-img]"+")"}); 

    }); 
}); 

$(this).css({"background-image"**, "url("+"/fabric/images/[data-img]"+")"});** 

エラー:

Error: Uncaught SyntaxError: Unexpected token , on

+1

を使用して開始するには良い方法です。これは$(this).css( "background-image"、 "url(" + "/ path/[data-img]" + ")")のようになります。 – zillaofthegods

答えて

3

最初の問題は、data属性を連結する必要があることです。あなたが持っている通りに[data-img]を実行することで、文字列に含めることはできません。

さらに、jQuery css()関数には、2種類の引数があります。.css(property, value)または.css({property:value, property:value, ... })のいずれかを指定できます。あなたはこれら二つを混ぜ合わせたように見え、代わりに{property,value}のオブジェクトを渡しています。ここで

$("div.element-item").each(function(){ 
    var imgUrl = "/path/" + $(this).data("img"); 
    $(this).css("background-image", "url(" + imgUrl + ")"); 
}); 
0

使用.data()を使用してdata-img属性にアクセスします。

は、文字列連結で[data-img]を使用してデータ属性を追加できません。 .data( "img")メソッドを使用してdata-img属性値を取得し、文字列に追加します。

 
$(document).ready(function(){ 
// DOM is ready here 

$("div.element-item").each(function(){ 
    var dataImage = '/path/' + $(this).data('img'); 
    $(this).css("background-image", "url(" + dataImage + ")"); 

}); 
2

は、あなたがあなたの `.css`のカーリーbracksを持って.ATTR機能

$(document).ready(function(){ 
    $("div.element-item").each(function(){ 
      var $dataImage=$(this).attr("data-img"); //notice the .attr function 
      $(this).css("background-image", "url('/path/" + $dataImage + "')"); 

     }); 
}); 
+0

URL文字列で '$ data-image'を連結する必要があるので、そのように変数を使用することはできません。私のdownvoteではありません。 – bhansa

+1

ちょっと@Brian。この回答(およびコード)には複数の問題があります。最初に、OPに彼の答えが間違っている理由を説明したり、あなたが修正したことを説明したりすることはありません - それは "違いを見つける"というゲームです。第二に、変数名はJavaScriptでは '-'を持つことができないので、コードのどれも動作しません。第3に、変数はグローバルスコープで( 'var'宣言なしで)宣言されるべきではありません(ここでは' $ 'は誤解を招くものではありません)。最後に ')}'がありません。コードのみの回答はめったに*良い*回答ではありませんが、投稿する場合は少なくとも実行して動作することを確認してください。 – Santi

+1

私は自分のdownvoteを削除しました。 JavaScriptでは、 'var'という言葉を持たない変数を宣言すると* global *となり、通常はグローバルスコープを可能な限りきれいに保つ必要があることに注意してください。さらに、変数名の前の '$'は通常、それがjQueryオブジェクトであることを示しますが、コードでは単純な 'string'です。最後に、あなたのCSSプロパティはパスの周りに一重引用符で 'url( '/ path /' image-name.svg);とレンダリングされます。編集ありがとう: – Santi

関連する問題