1

IEMobileで動作する必要のあるモバイルWebアプリに取り組んでいます。className' 'プロパティ(IE4エンジン...)をサポートしていないIEMobileで発生するJavaScriptエラーを絞り込みました。私は最小限のコード変更ですべてのブラウザで機能する代替手段を見つけようとしています(私はすでに' className'を使用するいくつかのライブラリを持っています)。

className私が考えることができる最も簡単なアプローチは、クラス名を含むようにIEの要素プロトタイプを変更することです(クラス名がない場合)。問題は、IEモバイルでの''の代替手段がわからないことです。

私はこれを試しました:

element.className = element.class;

はJavaScriptのキーワードであり、私のJSコンプレッサーはそれを気に入らないため、これは明らかに機能しませclassん。おそらく、とにかく有効ではありません。

要素のクラスを変更する必要があるすべての場所で「setAttribute()」を使用する以外に、classNameと同等の使用できるプロパティはありますか?

4

3 に答える 3

2

の使用を避けることはできませんsetAttribute()が、jQuery プレイブックから一行取り出して、オプションのパラメーターでヘルパー プロシージャを使用することができます。このコードはテストされていませんが、動作するはずです:

var className = function (obj, value)
{
    if (value !== undefined)
    {
        return obj.setAttribute ('class', value);
    }
    return obj.getAttribute ('class');
};

// Use as
alert (className (element));
className (element, "foo");
alert (className (element));
于 2009-04-13T18:21:28.460 に答える
1

John Millikinのフォローアップとして、その関数をIEの要素プロトタイプの一部にすることもできます。

Element.prototype.getClass = function() {
    return obj.getAttribute ('class');
}
Element.prototype.setClass = function(newClass) {
    return obj.setAttribute('class', newClass);
}

または、ジョンが提供するようなコンボメソッドが必要な場合...

Element.prototype.className = function(newClass) {
    if (!newClass)
        return this.getClass();
    return this.setClass(newClass);
}
于 2009-04-14T17:31:45.983 に答える
1

属性なし、いいえ。残念ながら、getAttribute() と setAttribute() にこだわっています。

于 2009-04-08T04:01:51.933 に答える