2

selectその場で検証して適切なメッセージを表示するために使用するカスタム属性がいくつかある要素があります。属性の名前は、次のようにキャメルケースに入れられます

<select validationMessage="Must select something" ... >...

問題は、1.6より古いバージョンのjQueryでは.attr()大文字と小文字が区別されるように見えることです。さらに問題なのは、元々大文字と小文字が区別された属性をフェッチしないことです。これはChromeのFirefoxでも同じように機能しますが、Internet Explorerでは期待どおりに機能します(大文字と小文字は区別されません)。すべてのケーシング(元のケーシングを除く)が機能することも興味深いです。

これがこの問題のJSFiddleの例です。左側のjQuerylibバージョンを変更し、[実行]をクリックして、他のバージョンとの動作を確認できます。

この問題をどのように軽減しようとしていますか?

4

2 に答える 2

9

jQueryattr()は 1.6 で動作方法を変更しました。このバージョンより前は、ほとんどが内部のプロパティにattr()直接マップされていました— 考えられるような属性ではありませんでした。DOM プロパティ名は通常 1 つの単語であるため、jQuery は渡されたほとんどの文字列を小文字に変換し、キャメル ケースのいくつかのプロパティ名を例外として作成しました。jQuery がこのように動作した理由は、ブラウザーの不整合とおよび.getAttribute()setAttribute()

jQuery 1.6 以降、.attr() メソッドは、設定されていない属性に対して undefined を返します。さらに、.attr() は、プレーン オブジェクト、配列、ウィンドウ、またはドキュメントでは使用しないでください。DOM プロパティを取得および変更するには、.prop() メソッドを使用します。ソース

1.6 では、はフードの下attr()にマップされ、新しいメソッドはプロパティ値を取得します。getAttribute() prop()

特定の状況では、属性とプロパティの違いが重要になる場合があります。jQuery 1.6 より前では、一部の属性を取得するときに .attr() メソッドがプロパティ値を考慮に入れることがあり、一貫性のない動作を引き起こす可能性がありました。jQuery 1.6 以降、.prop() メソッドはプロパティ値を明示的に取得する方法を提供しますが、.attr() は属性のみを取得します。ソース

于 2011-05-18T10:11:15.757 に答える
2

attr()同等のjavascriptに置き換えると、getAttribute()大文字と小文字は区別されないようです。

唯一の欠点は、get()最初に js オブジェクトを作成する必要があることです。

sel.get(0).getAttribute("validationMessage")

結果はこちら

于 2011-05-18T09:59:33.433 に答える