2012-01-16 52 views
4

私はプロットする要素のid属性が必要であるというこの愚かな要求を持っているjqPlotを使用しています。存在しない要素のIDを取得しますか?

しかし、私のjavascriptは要素で動作するjQueryを使用しており、IDを持つdivに依存したくありません。

何らかの理由で、jQuery $(this)要素を指定すると、divのためにオンザフライでidを生成し、そのIDをjqPlot関数に渡すことはできますか?このような

何か:感謝

(function($){ //jquery plugin style 
    $.fn.myPlot = function(){ 
     //Somehow get id for "this" 
     var generatedId = somehowCreateID(this); 
     jqPlot.plot(generatedId); 
    } 
})(jQuery); 

任意のヒント!

答えて

0
function generateID(element) { 
    var id; 
    do { 
     id = "_" + Math.floor(Math.random() * 1000000000); 
    } while (document.getElementById(id) != null); 

    element.id = id; 
    return id; 
} 
0

あなたは、少なくとも1つの文字で始まるカウンタを使用する(非HTML5文書に準拠する)ことができます。

IDがunqiueするguarenteedする必要がありますが、する必要はありませんので
(function($) { 
    var counter = 0; 
    $.fn.myPlot = function() { 
     return this.each(function() { 
      jqPlot.plot(this.id || (this.id = "plot" + counter++)); 
     }); 
    } 
})(jQuery); 
4

これは、カウンタを追跡する機能assignID.cntrのプロパティを使用しています

function assignID(elem, prefix) { 
    prefix = prefix || "autoId_"; 
    if (elem.id) { 
     return (elem.id); 
    } else { 
     if (!assignID.cntr) { 
      assignID.cntr = 1; 
     } 
     var id = prefix + assignID.cntr++; 
     elem.id = id; 
     return(id); 
    } 
} 

:それはちょうどこのようなアルファ接頭辞で単調に増加するID番号を使用するより良いですが、ランダムでそれが使用されるたびに1ずつ増加するので、ここで割り当てられたIDは以前に割り当てられたIDと同じになることはありません。

その後、任意の要素は、常にちょうどこれを行うことにより、IDを持っていることを確認することができます

assignID(elem, "plot"); 

あなたがこれを行うだろうjQueryのメソッドをしたい場合、あなたはこのようにそれを行うことができます:

jQuery.assignIDCntr = 1; 
jQuery.fn.assignID = function(prefix) { 
    prefix = prefix || "autoId_"; 
    return this.each(function() { 
     if (!this.id) { 
      this.id = prefix + jQuery.assignIDCntr++; 
     } 
    }); 
} 

そして、あなたはこのようにそれを使用します。

$(".myobjects").assignID("plot"); 
関連する問題