在没有元素的地方获取元素的ID?

时间:2012-01-16 20:45:45

标签: jquery jqplot

所以,我正在使用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);

任何提示赞赏!

3 个答案:

答案 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);