HOME>WEBプログラム覚書>[jQuery].add()で戸惑った件

[jQuery].add()で戸惑った件

jQueryの.add()。いまさらながら、なんでこれが違う結果になるのか戸惑う。

サンプル

実行結果


Javascript

  1. $('.jqTest1 .execute1').on('click', function(e){
  2.     var div$ = $('<div>').css({
  3.                     width: 100,
  4.                     height: 100,
  5.                     background: '#555555'
  6.                 })
  7.                 .add('<p>', {text: '追加される'}).css({
  8.                     border: '5px solid #990000'
  9.                 });
  10.  
  11.    $('.jqTest1').append(div$);
  12. });
  13.  
  14. $('.jqTest1 .execute2').on('click', function(e){
  15.     var div$ = $('<div>').css({
  16.                     width: 100,
  17.                     height: 100,
  18.                     background: '#555555'
  19.                 });
  20.  
  21.     div$.add('<p>', {text: '追加されない'}).css({
  22.             border: '5px solid #990000'
  23.     });
  24.  
  25.    $('.jqTest1').append(div$);
  26. });

HTML

  1. <div class="jqTest1">
  2.     <button class="execute1">execute1</button><button class="execute2">execute2</button>
  3.     <hr />
  4. </div>

正解はこうだった。

サンプル

実行結果


Javascript

  1. $('.jqTest2 .execute1').on('click', function(e){
  2.     var div$ = $('<div>').css({
  3.                     width: 100,
  4.                     height: 100,
  5.                     background: '#555555'
  6.                 });
  7.  
  8.     div$ = div$.add('<p>', {text: '追加される'}).css({
  9.             border: '5px solid #990000'
  10.     });
  11.  
  12.    $('.jqTest2').append(div$);
  13. });
  14.  
  15. $('.jqTest2 .execute2').on('click', function(e){
  16.     var div$ = $('<div>').css({
  17.                     width: 100,
  18.                     height: 100,
  19.                     background: '#555555'
  20.                 });
  21.  
  22.    $('.jqTest2').append(div$.add('<p>', {text: '追加される'})
  23.                             .css({ border: '5px solid #990000'})
  24.                             );
  25. });

HTML

  1. <div class="jqTest2">
  2.     <button class="execute1">execute1</button><button class="execute2">execute2</button>
  3.     <hr />
  4. </div>

.add(elem)は対象のjQueryオブジェクトにelemを追加するのではなく、elemを追加した新たなjQueryオブジェクトを返すみたい。ちゃんと公式サイトにかいてありましたわ。

参照ページ

投稿日 2011年11月26日 04:46
カテゴリ JavaScript
タグ jQuery
トラックバック URL http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1241

コメント

コメントする
Name
Email Address
URL