2011-05-23 36 views
1


我有下面的函數用於初始化一個小部件。在添加和刪除類時遇到奇怪的問題

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

它的作用是在窗口小部件的左上角追加一個減號圖標。 我有一些ajax調用,因爲這個函數被多次調用並追加一個減號圖標多次。

我打算以這種方式重新編寫此函數,以便調用多少次,只在標題中附加一個減號圖標。
我試過休耕方法,但沒有奏效。

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最後追加一個減號圖標,但它不是爲我工作。

編輯 我打電話這此功能way-對應於此

$('.div_portlet').initPortlet('.div_portlet','.div_header','.div_content') 
      $('.div_portlet_inner').initPortlet('.div_portlet_inner','.div_header_inner','.div_content_inner'); 

HTML是 -

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> 

的第二個呼叫HTML將保持不變,只是課程將從變更至div_portlet_inne r,對於其他類也是如此。 我已經寫這個函數在一個js文件中。

任何幫助或建議,以便我可以實現我的目標將高度讚賞。 請大家幫幫我,我在這一點卡住了。 在此先感謝!!!!!

+0

誰投了這個問題,爲什麼? – Vivek 2011-05-23 10:18:04

+5

不是我,而是:你可以改進問題的標題嗎?你可以在你的問題的身體中使用一些標點符號和大寫字母嗎?這也是一個相當含糊的問題,你的HTML示例包含了看起來不相關的ASP。你應該在jsfiddle.net上生成一個完整的測試用例。 – 2011-05-23 10:21:35

+0

建議問題標題更改爲:'如何確定是否已經應用jquery函數' – 2011-05-23 10:23:49

回答

2

不知道使用了哪個變量o - 但我下面修改的一般要點是使用jQuery hasClass()函數檢查類是否已經被應用。

jQuery.fn.initPortlet = function(parent_component ,header , component){ 
    var o = $(this[0]) 

    if (!this.hasClass('ui-widget')) 
    { 
     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); 
    } 
}; 
+0

它不回答我的問題....我的問題是如何刪除該類如果它已經在那裏...即減號圖標..如果我將這樣做,它會被稱爲只有一次爲不同的論點。 – Vivek 2011-05-23 10:29:44

+0

和我被迫一次又一次地調用這個函數,但是 - 圖標計數應該是1. – Vivek 2011-05-23 10:31:18

+0

您是否在'initPortlet'代碼中執行了另外一個你沒有顯示的東西?我可以理解,如果它正在更新一些動態內容,那麼它會多次調用它,但它似乎應用了一些靜態html更改,請解釋爲什麼需要多次執行函數體? – 2011-05-23 10:35:50

2

ʞɔɐɯɹoↃɔWsǝɯɐs給了一個很好的解決了這個問題,但這裏是一個解釋,爲什麼你的企圖沒有工作:

選擇'span.ui-icon ui-icon-minusthick'的第一部分是尋找一個spanui-icon類,如你所願,但第二部分尋找<ui-icon-minusthick>這種顯然不存在的元素。要選擇多個類名的元素,他們都加入到同一個選擇,就像你在CSS會:

$('span.ui-icon.ui-icon-minusthick') 

當然,你代碼的其餘部分將是一個空操作,因爲find($minusthick)將什麼也不做,因此jQuery鏈的其餘部分將沒有上下文來操作。這將(我認爲)的工作如你預期:

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

額外end()調用返回jQuery對象的第一選擇,在這種情況下div.div_header並沒有必要進行最後end()

+0

+1我認爲你回答OP的問題,但我認爲刪除然後重新添加相同的內容毫無意義? – 2011-05-23 10:40:32

+0

什麼是$ minusthick? – Vivek 2011-05-23 10:45:34

+0

@ʞɔɐɯɹoↃɔWWsǝɯɐs並不總是,但在這種情況下,我會同意你的意見,因此我認爲你給出了一個好的解決方案,我只是認爲這將有助於OP瞭解他們的解決方案爲什麼不起作用:) – roryf 2011-05-23 10:48:21