所以,我正在使用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 :(得分:4)
由于ID必须保证不合理,但不需要是随机的,所以最好只使用带有alpha前缀的单调递增ID号:
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);
}
}
这使用函数assignID.cntr
的属性来跟踪每次使用时递增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");
答案 1 :(得分:0)
function generateID(element) {
var id;
do {
id = "_" + Math.floor(Math.random() * 1000000000);
} while (document.getElementById(id) != null);
element.id = id;
return id;
}
答案 2 :(得分:0)
您可以使用前缀至少一个字母的计数器(以符合非HTML5文档):
(function($) {
var counter = 0;
$.fn.myPlot = function() {
return this.each(function() {
jqPlot.plot(this.id || (this.id = "plot" + counter++));
});
}
})(jQuery);