2017-04-20 5 views
0

jQueryの初心者です。ユーザーが各チームのチームロゴをクリックすると、各フットボールチームについての情報を表示するjQueryコードを書きました。jQueryでもっと良い方法を見つけようとしています

私はどれが<div>要素がクリックされたかを調べるためにindex()を使用しました。

そして、これにindex()を使用せずに、このコードを書くにはより良い方法でなくてはならないと思います。そして、要素をクラスa,b and cで指定しないといいです。

はあなたが役立つことを願って、ここに私のコードは次のとおりです。それを行うには

<!DOCTYPE html> 
 
<html lang="en"> 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title></title> 
 
    <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> 
 
    <style> 
 
     .w3-card{ 
 
      width: 30%; 
 
      margin-right: 10px; 
 
      background-color: gainsboro; 
 
      cursor: pointer; 
 
      display: inline-block; 
 
     } 
 

 
     /*.w3-card:hover{*/ 
 
       /*background-color: #B0B0B0;*/ 
 
     /*}*/ 
 

 
     p{ 
 
      text-align: center; 
 
      font-family: Arial, sans-serif; 
 
      font-weight: bold; 
 
     } 
 

 
     img{ 
 
      margin-left: auto; 
 
      margin-right: auto; 
 
      display: block; 
 
     } 
 

 
     .container{ 
 
      width: 50%; 
 
      margin: auto; 
 
     } 
 

 
     .imgc{ 
 
      margin-left: 20px; 
 
      margin-right: -20px; 
 
     } 
 

 
     .info{ 
 
      width: 100%; 
 
      background-color: #82ABE5; 
 
      display: none; 
 
      padding: 5px; 
 
     } 
 

 
    </style> 
 

 
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script> 
 
    <script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
 
    <script> 
 

 
     $(function() { 
 

 
      var a = "Juventus is one of the strongest team in Italy"; 
 
      var b = "Barcelona is a spanish team"; 
 
      var c = "Real madrid has the most awards in europe"; 
 

 
      $('.w3-card').hover(function() { 
 
       $(this).css("background-color", "#B0B0B0"); 
 
      }, 
 
      function() { 
 
       $(this).css("background-color", "gainsboro"); 
 
      }); 
 

 
      $('.w3-card').click(function() { 
 
       var index = $(this).index(); 
 

 
       $('.info').slideUp(400, function() { 
 
        $('p.a').hide(); 
 
        $('p.b').hide(); 
 
        $('p.c').hide(); 
 

 
        if(index == 0){ 
 
         $('.info').slideDown(400); 
 
         $('.a').show(); 
 
        } 
 
        if(index == 1){ 
 
         $('.info').slideDown(400); 
 
         $('.b').show(); 
 
        } 
 
        if(index == 2){ 
 
         $('.info').slideDown(400); 
 
         $('.c').show(); 
 
        } 
 

 
       }); 
 
      }) 
 

 
     }); 
 

 
    </script> 
 
</head> 
 
<body> 
 

 
    <div class="container"> 
 
     <div class="imgc"> 
 
       <div class="w3-panel w3-card"><img src="img/juve.png"><p>Juventus</p></div> 
 
       <div class="w3-panel w3-card"><img src="img/barca.png"><p>Barcelona</p></div> 
 
       <div class="w3-panel w3-card"><img src="img/real.png"><p>Real Madrid</p></div> 
 
     </div> 
 

 
     <div class="info"> 
 
      <p class="a">Juventus Football Club colloquially known as Juve is a professional Italian association football club based in Turin, Piedmont.</p> 
 
      <p class="b">Futbol Club Barcelona commonly known as Barcelona and familiarly as Barça is a professional football club based in Barcelona, Catalonia, Spain.</p> 
 
      <p class="c">Real Madrid Club de Fútbol Royal Madrid Football Club), commonly known as Real Madrid, or simply as Real outside Spain frontiers, is a professional football club based in Madrid, Spain.</p> 
 
     </div> 
 

 
    </div> 
 

 
</body> 
 
</html>

+0

あなたは、HTMLを構成しているかによって自分自身にこれは難しい作っています。 1つのコンテナにイメージと1つのコンテナを持つ代わりに、それぞれのイメージで情報をグループ化してみませんか? – satnam

+0

もう1つの解決策は、各部門チーム(data-team = "a" "など)にデータ属性を追加し、対応する情報を表示します: '$('。$ {team} ').show();'。 –

+1

あなたのタイトルをあなたの質問に関係するように編集してください。 「jqueryでより良い方法を見つけようとしている」というのは、人々がこの質問を見つけるのに役立つものではありません。 –

答えて

2

一つの方法は、あなたのクリック可能な要素にカスタムdata-*属性を持っているだろう。あなたは既に一般的なクラスを使用しているので、これは大きな変化ではありません。その後、

<div class="w3-panel w3-card" data-target="a"> 

そして、それを使用します。私の意見で

$('.w3-card').click(function() { 
    var target = $(this).data("target"); 
    $('.info').slideUp(400, function() { 
     $('.info').slideDown(400); 
     $('.' + target).show(); 
    }); 
}); 
+1

私はコメントで彼にこれを正確に言った。これが最も実用的な解決策です。 –

+1

@GustavoGarcía - うん、私はポストをクリックしたときあなたのコメントを見ました。誰かと同じページにいることが常に幸せです。 – tymeJV

0

を最高のリファクタリングがされるだろう情報を引き出すためにあなたは非常に多くのDOM要素を持たないようにjavascript変数に変換します。ページ上にサッカーチームが増えれば、管理が難しくなる可能性があります。

このリファクタでは、すべてのチームの情報を保持するオブジェクトを作成し、画像の1つがクリックされたときに#info divに挿入します。ここにコードがあります。

<!DOCTYPE html> 
 
<html lang="en"> 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title></title> 
 
    <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> 
 
    <style> 
 
     .w3-card{ 
 
      width: 30%; 
 
      margin-right: 10px; 
 
      background-color: gainsboro; 
 
      cursor: pointer; 
 
      display: inline-block; 
 
     } 
 

 
     /*.w3-card:hover{*/ 
 
       /*background-color: #B0B0B0;*/ 
 
     /*}*/ 
 

 
     p{ 
 
      text-align: center; 
 
      font-family: Arial, sans-serif; 
 
      font-weight: bold; 
 
     } 
 

 
     img{ 
 
      margin-left: auto; 
 
      margin-right: auto; 
 
      display: block; 
 
     } 
 

 
     .container{ 
 
      width: 50%; 
 
      margin: auto; 
 
     } 
 

 
     .imgc{ 
 
      margin-left: 20px; 
 
      margin-right: -20px; 
 
     } 
 

 
     #info{ 
 
      width: 100%; 
 
      background-color: #82ABE5; 
 
      display: none; 
 
      padding: 5px; 
 
     } 
 

 
    </style> 
 

 
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script> 
 
    <script src="//code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
 
    <script> 
 

 
     $(function() { 
 

 
      var a = "Juventus is one of the strongest team in Italy"; 
 
      var b = "Barcelona is a spanish team"; 
 
      var c = "Real madrid has the most awards in europe"; 
 

 
      var info = { 
 
       juve: 'Juventus Football Club colloquially known as Juve is a professional Italian association football club based in Turin, Piedmont.', 
 
       barca: 'Futbol Club Barcelona commonly known as Barcelona and familiarly as Barça is a professional football club based in Barcelona, Catalonia, Spain.', 
 
       real: 'Real Madrid Club de Fútbol Royal Madrid Football Club), commonly known as Real Madrid, or simply as Real outside Spain frontiers, is a professional football club based in Madrid, Spain.' 
 
      }; 
 

 
      $('.w3-card').hover(function() { 
 
       $(this).css("background-color", "#B0B0B0"); 
 
      }, 
 
      function() { 
 
       $(this).css("background-color", "gainsboro"); 
 
      }); 
 

 
      $('.w3-card').click(function() { 
 
       var team = $(this).data('team'); 
 

 
       $('#info').slideUp(400, function() { 
 

 
        $('#info').html('<p>' + info[team] + '</p>').slideDown(400); 
 

 
       }); 
 
      }) 
 

 
     }); 
 

 
    </script> 
 
</head> 
 
<body> 
 

 
    <div class="container"> 
 
     <div class="imgc"> 
 
       <div class="w3-panel w3-card" data-team='juve'><img src="img/juve.png"><p>Juventus</p></div> 
 
       <div class="w3-panel w3-card" data-team='barca'><img src="img/barca.png"><p>Barcelona</p></div> 
 
       <div class="w3-panel w3-card" data-team='real'><img src="img/real.png"><p>Real Madrid</p></div> 
 
     </div> 
 

 
     <div id="info"></div> 
 

 
    </div> 
 

 
</body> 
 
</html>

関連する問題