【jQuery】IE8で"border-spacing"を取得しようとするとエラーに

【要するに】
IE8では、下記がエラーになります。(jQuery 1.2.x 〜 1.3.2)


jQuery:
$('テーブル要素').css('border-spacing');

▲エラーダイアログ



【実験】
jQueryの各バージョンについて、下記のリンク先で実験しています。
1.1.4だけは、正常に取得できました。



【エラーの原因】
(※『jquery-1.3.2.js』で話を進めていきます)


781行目から定義されている『curCSS()』は、"width"と"height"以外の
スタイル属性値を取得するメソッドです。
属性値を取得する方法はブラウザによって異なるため、以下のような
条件分岐が設けられています。
(797〜842行目)


if ( !force && style && style[ name ] ){
// IE7

} else if ( defaultView.getComputedStyle ) {
// Firefox3.0
// Chrome3.0
// Opera10.0
// Safari4.0

} else if ( elem.currentStyle ) {
// IE8
}

IE7とIE8では、分岐する先が異なっています。


さて、"border-spacing"の属性値は、"10px 10px"ような形で
取り出されます。
これは、たとえば"padding-left"の"10px"のような、値が
単一となる一般的なCSSプロパティとは異なっています。
これがエラーの原因でした。


IE8が分岐した先では、以下のような処理が行われます。
前記のエラーダイアログの画像に表示されている、
問題の『835行目』です。


style.left = ret || 0;

//ret …属性値が格納されている("10px 10px"など)

"style.left"の"left"はスタイル属性の"left"そのものでは
ありませんが、最終的にはそれにつながります。
つまり、"border-spacing"の値を取得した際には

CSS:
(ある要素){
left : 10px 10px;
}
と指定するのと同じになってしまいます。


今までこの分岐ルートの処理がどのブラウザのために用意されて
いたのかは知りませんが、ともかく、IE8を使用してこのルートに
振り分けられてしまうと、"border-spacing"から取得した独特な値が
"left"に代入されてエラーになってしまう、という仕組みが
判明しました。



【対応策】
現状では、『"border-spacing"の値を利用するシステムを作らない』
ということしかないと思います。


…もっとも、こんなマイナーなスタイル属性を使う人なんてそうそう
いないと思いますが…。ここに一人いたわけです。



【参考にした資料】

jquery.jsを読み解く 第4回 jQueryライブラリ(770行目〜1093行目)



ろくにライブラリのソースも読めない初心者が調べたことなので、
間違っている箇所もあるかと思います。
その場合は、どんどんツッコミを入れてくださいm(_ _)m