2012-01-16 98 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");