2012-01-17 7 views
0

私は非常にjQueryを新しくしました。私は、DOM要素を設定するためのプラグインを開発しています(私自身のために)html()はajax呼び出しによって返されたコンテンツを持っています。例:jQueryはプラグイン内を見つけることができませんか?

<span id="a" class="scalar">?</span> 
<span id="b" class="scalar">?</span> 
<span id="c" class="scalar">?</span><!-- this will not be updated --> 

stats.phpは、このようなJSONオブジェクトを返すために起こっている場合:{ a : 3, b : 7 }結果のHTMLは、(各オブジェクトのプロパティは、プラグインが呼び出された選択の中idと一致します)次のようになります。

<span id="a" class="scalar">3</span> 
<span id="b" class="scalar">7</span> 
<span id="c" class="scalar">?</span><!-- this will not be updated --> 

これはプラグインの呼び出しと定義です。 質問は:なぜfind()は、更新する要素を適切に選択できないのですか?

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('.scalar').scalar({ url : '../REST/stats.php' }); 
    }); 
</script> 

(function($) { 

    $.fn.scalar = function(options) { 

     var opt = $.extend({ 
      url : 'REST/stats.php', 
      type : 'POST', 
      context: this, 
      dataTypeString : 'json' 
     }, options); 

     $.ajax($.extend(opt, { 
      success : function(obj) { 
       for(k in obj) { 
        if(!obj.hasOwnProperty(k)) continue; 
        console.log(this.find('#' + k)); 
       } 
      } 
     })); 

     return this.each(); 
    }; 

})(jQuery); 

答えて

1

findは、子孫要素を検索し、あなたが探している要素は、(彼らはお互いのすべての兄弟である)の子孫ではありませんので。代わりにfilterを使用してください:

console.log(this.filter('#' + k)); 

thisはDOM要素のセットをラッピングjQueryオブジェクトになります。これらの要素の1つ以上にidの子孫要素が含まれていない限り、findで検索すると機能しません。 filterは、要素そのものを見る必要があります。

関連する問題