2012-02-17 16 views
1

我一直在拼命尋找這個問題的答案,但沒有找到任何東西。 我目前正在改進我創建的網站上的代碼,從「自定義」屬性切換到HTML5數據 - yyy屬性。現在繼承我的問題。jQuery removeAttribute()不工作

$("#test ul li").click(function(event){ 
     $(this).toggleClass("selected"); 
     if($(this).hasClass("selected")){ 
      if(jQuery.trim($("#input_value").val())){ 
       $(this).data("special",{"value":jQuery.trim($("#input_value").val())}); 
      } 
     } 
     else{ 
      $(this).removeAttr("data-special"); 
     } 
    }); 

單擊某個li元素時會觸發以下代碼。一個類被切換,並且在切換之後(這是一個單詞?)腳本檢查該元素是否具有切換的類。如果它沒有類(這是問題所在),腳本應該刪除屬性「data-special」,刪除數據。這根本不會發生!

如果添加

$("#test ul li").removeAttr("data-special"); 

的功能外,它的所有罰款和按預期工作。有任何想法嗎?

回答

3

您已將data-special的值導入.data(),因此請使用.removeData()

$(this).removeData("special"); 

將屬性值導入.data()後,您需要在此處使用它。刪除該屬性不會刪除.data()

如果您需要將它們都移除,那麼您需要調用這兩種方法,或者根本不要使用.data()

+0

謝謝!有趣的是,這是我開始做的事情,我必須在我的代碼中有一個錯誤,因爲它似乎沒有工作,當我沒有搜索答案並發現這個:http://bugs.jquery。 com/ticket/10784,並且我理解(或誤解)這是爲了將data-yyy視爲刪除的屬性。 還有一件事,或者根本就不要在第一個地方使用.data()。我不應該使用.data()?你不喜歡它? – 2012-02-17 08:06:14

+0

@BenediktÓmarsson:不客氣。關於使用'.data()',如果您需要存儲複雜的數據,它會很有用。例如,你似乎在存儲一個對象。 '{value:「特殊值」}'如果你真的需要一個對象來添加和刪除屬性,那麼'.data()'可能會有用。但是如果你所做的只是讀取'data-'屬性的值,那麼我可能只是使用'.attr()',因爲它更快一些,並且不會在jQuery中增加任何額外的東西.cache'。 – 2012-02-17 14:28:44

+0

我明白。我正在寫的這個應用程序在複雜的一面(至少對我來說,這是一個新的業務)。我習慣用戶.attr()和我使用自定義屬性,如

somevalue
。 但是,當使用w3c工具來驗證我的代碼時,它總是抱怨這些屬性,因爲它們不存在''。之後,我得到了一個印象,即添加自定義屬性(儘管可能)是一種骯髒的交易。這是不是真的?提前感謝您的幫助和意見。 – 2012-02-17 16:54:48

1

這不是一個屬性

$(本)。數據( 「特殊」,{ 「值」:jQuery.trim($( 「#將input_value」)VAL())}) ;

您正在將此存儲在jquery緩存中。因此,如果您想刪除它,則必須按照其他海報的說明進行操作,並使用removeData函數將其消除。