2012-01-16 3 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

당신은 적어도 하나 개의 문자로 시작 카운터를 사용 (비 HTML5 문서을 준수하기 위해) 할 수 있습니다

ID가 unqiue로 수익을 창출해야하지만, 필요하지 않기 때문에
(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 번호를 사용하는 것이 훨씬 낫다, 무작위 이 ID는 사용 할 때마다 하나씩 증가하므로 여기에 할당 된 ID는 이전에 할당 된 ID와 동일하지 않습니다.

그런 다음 요소가 항상 그냥이 일을하여 ID를 가지고 있는지 확인 할 수 있습니다 :이 작업을 수행 할 것 jQuery를 방법을 원하는 경우에

assignID(elem, "plot"); 

는, 다음과 같이 그것을 할 수 :

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");