0

属性値がないときにjQueryがクラスまたはスタイルの属性名を削除しないのはなぜですか?

たとえば、$('<div>').addClass('foo').removeClass('foo')returns[<div class>​&lt;/div>​]と not[<div>​&lt;/div>​]

私の推測ではパフォーマンスですが、他の理由があるかもしれません。

jQuery の実装は次のとおりです。

https://github.com/jquery/jquery/blob/master/src/attributes.js#L88

4

1 に答える 1

2

比較 (Chrome 23 から):

> $('<div>').addClass('foo').removeClass('foo').attr('class')
""

と:

> $('<div>').attr('class')
undefined

前者の場合、要素にはまだclass属性がありますが、値はありません。

後者の場合、要素にはclass属性がまったくありません。

何が起こっているかというと、jQuery は単純な文字列操作を使用してクラスを削除します。結果の文字列が空の場合、それが使用さclassれます。属性を完全に削除することはありません。

Chrome では、DOM3classList関数でさえ空のclass属性を残します。(他のクラスがない場合) will を呼び出すと、空の が残りel.classList.add('foo')ます。el.classList.remove('foo')class

于 2012-12-13T22:51:08.693 に答える