2012-02-17 9 views
1

私はこの質問に対する回答を求めていますが、何も見つかりませんでした。 現在、作成中のウェブサイトのコードを改良しています。カスタム属性からHTML5のdata-yyy属性に切り替わりました。今私の問題をheres。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と私は、データyyyを削除の属性として扱うようにこれを理解しました(または誤解されています)。 もう1つ、または単に最初の場所で.data()を使用しないでください。 .data()を使用しないでください。あなたはそれが好きではない? –

+0

@BenediktÓmarsson:ようこそ。 '.data()'の使用に関しては、複雑なデータを格納する必要がある場合に便利です。たとえば、オブジェクトを格納しているように見えます。 '{value:"特別な値 "}'実際にプロパティを追加したり削除したりするオブジェクトが必要な場合は、 '.data()'が便利です。しかし、あなたがやっているのは、その1つの 'data-'属性の値を読み込んでいるのであれば、 '.attr()'を使うほうが少し速いので、 'jQuery .cache'。 –

+0

私は理解しています。私が書いているアプリケーションは、複雑な面で少しです(少なくとも私にとっては、ビジネスで新しい)。私はuser .attr()を使用していましたが、カスタム属性を使用しました。

somevalue
のようなものでした。 しかし、コードを検証するためにw3cツールを使用すると、存在しないため、これらの属性について常に不平を言います。その後、カスタム属性を追加することは、可能ではあるが汚い取引であるという印象を受けました。これは本当ですか?ご協力いただきありがとうございます。 –

1

これは属性ではありません

$(この).dataセクション( "特別"、{ "値":。jQuery.trim($( "#のinput_value")のval())}) ;

あなたはこれをjqueryキャッシュに保存しています。したがって、削除する場合は、指定した他のポスターと同じようにしてremoveData関数を使用して削除する必要があります。