2010-11-18 11 views

答えて

6

彼らは全く異なる操作である:空の文字列に属性を設定

ATTR(xは、 '')

removeAttr(x)はは、可能な場合、オブジェクトのプロパティを削除し、またはそれを削除し、そのオブジェクトクラスのDTDによって定義されている場合はデフォルト値にリセットします。

3

一部の属性はブール値(存在するかどうかに関係なく)です。例えば、属性disabledを取ってください。それが本当であれば、値が何に設定されているかは関係ありません。したがって、要素を再度有効にするには、.removeAttr('disabled')を使用する必要があります。しかし、jQueryはそれを少し正規化します。.attr('disabled', false);を使うことができます。答えは意味論だと思います。

編集:この答えはちょうど私がこの数年前に答えていることを警告いくつかのupvotesを得た

。これは(あなたがしようとしているものではありません)DOMオブジェクトからプロパティを削除しますよう

.prop('disabled', true) // set as disabled 
.prop('disabled', false) // set as enabled 
.prop('disabled') // return boolean (is this disabled?) 

ませ使用removeProp(「無効」)をDO - これは代わりに、プロパティの

使用。

9

jQueryライブラリ(下記参照)からremoveAttrを削除した場合、次のようになります。私ははいと言うだろう。

removeAttr: function(name, fn) { 
     return this.each(function(){ 
      jQuery.attr(this, name, ""); 
      if (this.nodeType === 1) { 
       this.removeAttribute(name); 
      } 
     }); 

出典:Jquery 1.4.3 uncompressed version

それは本質的に主観的なものですが。私はremoveAttrを使う方が自己記述的なアプローチだと思います。しかし、私は他の人がその反対を考えているのを見ることができました。

+3

これは非常にコード化されています。要素の場合、attrを '' * AND *(要素の場合)に設定するとDOMから属性が削除されます。 –

+0

@pst - 取得ポイント。私は "いいえ"を "はい"に変更しました – JohnFx

+0

もちろん、かなり遅いですが、@ john-stricklerの応答を確認してください。属性を空に設定するとタグ内に残り、「存在する」となります。これは、 'disabled'などのフラグとして使用される属性にとって重要です。 – rewritten

2

まず違い:

.removeAttr('name') // try to remove the attribute 'name' from the DOM 
.attr('name', '') // set the attribute 'name' to empty string 

第2の相違点は、おそらく、私だけに起こっChromeで非常によく.removeAttr()作業正しく、FirefoxとIEXPLORERではなくではなく、Safariで全く動作しません。

関連する問題