2016-11-09 9 views
2

私は単純なスクリプトのように、ボタンのトグルdivを表示と非表示にしています。これまでに行ったことがありますが、今回はjQueryで動的セレクタを使用していて、何が間違っているのかわかりません。jQueryダイナミックセレクタの作業を行うことができません

私は静的なもの(つまり '#liste_21')を呼び出すと、それは魅力的に機能しますが、アイテムの数が前もってはないので、ダイナミックバージョンが機能するようにしたいと思います。

何が悪いと思いますか?

Javascriptを

$(document).ready(function() { 
     $(".jour").click(function() { 
      var jour = $(this).text(); 
      $('#liste_'+jour).slideToggle(); 
     }); 
    }); 

HTML

<div id="calendrierActivites"> 
    <div id="nov20" class="jour"> 
     <span>20</span> 
    </div> 
    <div id="nov21" class="jour"> 
     <span>21</span> 
    </div> 
    <div id="nov22" class="jour"> 
     <span>22</span> 
    </div> 
</div> 

<div id="liste_20"> 
    <h2>20 novembre</h2> 
</div> 
<div id="liste_21"> 
    <h2>21 novembre</h2> 
</div> 

<div id="liste_22"> 
    <h2>22 novembre</h2> 
</div> 

https://jsfiddle.net/5yqsptry/#

+3

'$を( this).text() '=>余分な空白を表示して' trim() 'しようとする: '$(this).text()。trim()' – four

+1

それはそのトリックです。どうもありがとう! –

答えて

3

JS Fiddle

var jour = $(this).find('span').text(); 

$(this).text()は、jourdivクラス内のテキストを取得し、間違ったセレクタを使用しています。 .text()

+0

スパンが空白文字を追加する理由は何ですか?文字列をトリミングする@fourの提案もうまくいったので、正確に何が追加されたのか不思議です。 –

+2

それぞれの '.jour' divには、改行とタブがあり、おそらく' '要素の周囲にスペースがあります。あなたのスパンの中にそれが何もないので、それをつかむのが少し安全です! –

+2

それはスパンではありません... '.text()'は、実際には、その要素の終わりに向かって行終了記号と空白を含む親要素のすべての子孫テキストを取得します。これは、 'span'要素を選択してテキスト値を取得する方が安全な理由です – four

2

jQueryのドキュメントが原因異なるブラウザでHTMLパーサの変化に

と言って、返されたテキストは、改行やその他のホワイトスペースを変えることができます。

あなたは、単に空白をトリムすることができます

var jour = $(this).text().trim(); 
1

あなたはジュール値に

シオマネキトリムする必要があります。https://jsfiddle.net/5yqsptry/3/

JS:

$(document).ready(function() { 

    $(".jour").click(function() { 

     var jour = $(this).text(); 

     $('#liste_'+$.trim(jour)).slideToggle(); 
    }); 
}); 
関連する問題