2011-05-05 10 views
1


위젯을 초기화하는 데 사용되는 아래 기능이 있습니다.jquery 이상한 행동

jQuery.fn.initPortlet = function(parent_component ,header , component){ 
     var o = $(this[0]) 
     this.addClass("ui-widget ui-widget-content ui-corner-all") 
      .find(header)   
      .addClass("headertitle") 
      .addClass("align_center") 
      .addClass("defaultheadercolor") 
      .prepend('<span class="ui-icon ui-icon-minusthick"></span>') 
      .end() 
      .find(component); 
}; 

는 HTML : 그것은 무엇을

<div class="div_portlet" id="LINEITEM_HEADER" > 
<div class="div_header"><%=hu.getFrameURL(82,83)%> Line Item Header Information</div> 
      <div class="div_content" id="LINEITEM_HEADER_CONTENT"> 

      </div> 
</div> 

위젯의 왼쪽 상단 모서리에 마이너스 아이콘을 추가합니다. 이 함수는 여러 시간 호출되고 빼기 아이콘을 여러 번 추가하기 때문에 일부 아약스 호출이 있습니다.

나는 이런 식으로이 함수를 다시 작성해야하므로 몇 번이나 호출해야하는지, 헤더에 하나의 빼기 아이콘을 추가해야합니다.
나는 fallowing 접근 방식을 시도했지만 작동하지 않았다. 내가 트링하고있는 무슨

var $minusthick = $('span.ui-icon ui-icon-minusthick'); 
$('div.div_header').find($minusthick).remove().prepend('<span class="ui-icon ui-icon-minusthick"></span>').end(); 

은 마이너스 아이콘을 추가 마지막으로 클래스 이름 span.ui - 아이콘의 UI 아이콘 - minusthick 모든 범위를 제거하고, 그러나 그것은 나를 위해 일한 아니에요.

내 목표를 달성 할 수 있도록 도움이나 제안을 보내 주시면 매우 감사하겠습니다.
미리 감사드립니다 !!!!!

Edit-- 아래

솔루션은하지만 it fails if i am calling this function again with same parameter, 하나의 호출에 대해 잘 작동하고 있어야한다 불행하게도 나는이 기능을 여러 번 전화를해야 ... 난 this..i을 어떻게 할 수 당신은 이미 추가되었는지 추적 할 jQuery.data()을 사용할 수 있습니다

답변

5

.... 일을 많이 시도했지만 어딘가 실패 :(:(:(
나에게 몇 가지 방법을 제안하십시오
감사를 다시 한번 :.

jQuery.fn.initPortlet = function(parent_component, header, component){ 
     var o = $(this[0]); 
     if (! o.data('widgeted')) { 
      // .data('widgeted') will return NULL before it is set. 
      // So the first iteration of the function will execute 
      // this code block. 
      this.addClass("ui-widget ui-widget-content ui-corner-all") 
       .find(header)   
       .addClass("headertitle align_center defaultheadercolor") 
       .prepend('<span class="ui-icon ui-icon-minusthick"></span>') 
       .end() 
       .find(component); 
     } 
     // We set widgeted to true. Any further calls to this function 
     // (on this DOM node) will not execute the code block above. 
     o.data('widgeted', true); 
}; 
+0

+1 깔끔한 트릭을 위해 :) –

+0

@ Stephen- 답장을 보내 주셔서 감사합니다.하지만이 o.data ('widgeted')의 의미는 무엇입니까? – Vivek

+0

+1, 나는 항상 이것을한다. –