2012-01-16 96 views
4

因此,我使用jqPlot,它有这个愚蠢的要求,它需要一个元素的id属性来绘图。获取一个元素的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

您可以使用至少一个字母前缀的计数器(要与无HTML5文档):

(function($) { 
    var counter = 0; 
    $.fn.myPlot = function() { 
     return this.each(function() { 
      jqPlot.plot(this.id || (this.id = "plot" + counter++)); 
     }); 
    } 
})(jQuery); 
4

由于ID必须被保证的广告,以具有唯一性,但并不需要是随机的,这是更好的,只是使用单调递增的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的属性保留一个计数器的轨道在每次使用时都会增加一个,因此这里分配的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");