私は今小さなスクリプトを作成していますが、main関数のargの入力の1つは要素です。生のJSがこのようなもので機能することを確認するためにtheelement.value
、変数の値を取得するために行っています。thelement
残念ながら、がのようなjquery関数の場合は機能しません$('#foo')
。この種の互換性が必要な他のいくつかの理由はtheelement.style
、jqueryがサポートしていないものにアクセスする必要があることです。これら(など)にはjqueryの回避策があることは知っていますが、.css(), .val()
それらを使用すると、通常のjs入力(document.getElementbyId('foo')
)は機能しません。1つの「プロパティ」を使用して、要素のすべての入力(プロトタイプやDojoなどのライブラリからのものを含む)に対してユニバーサルにする方法はありますか?
2 に答える
いいえ、すべてを普遍的にすることはできません。
DOM要素で作業する場合は、入力がDOM要素である必要があり、フレームワークにはすべてDOM要素を取得する方法があります。そこにあるライブラリで動作するスクリプトを魔法のように作成することはできません。そのため、一般的なプラグインには通常、サポートを追加するためのライブラリ固有の拡張機能があります。
引数を取る関数があり、その引数としてさまざまな型を渡すと問題が発生するように思えます。
function doSomething(element) {
// do something with element
}
要素をjQueryオブジェクトにしたり、DOMオブジェクトにしたりする必要があると述べた後、他のライブラリ(プロトタイプ、Dojo)についても言及しました。
まず、一貫した型で関数を呼び出すだけで、問題は完全に解消されます。ここですべてのライブラリで使用できる最も単純なタイプはDOM要素です。したがって、その要素がjQueryオブジェクトやその他のライブラリオブジェクトではなくDOMオブジェクト参照として渡されるように強制すると、問題は完全に解消されます。呼び出し元が他のライブラリを使用していて、関数を呼び出したい場合は、いつでもそのライブラリからDOMオブジェクトを取得して、実際のDOMオブジェクトを渡すことができます。たとえば、jQueryでは、次のようなDOMオブジェクトを取得できます `$("#foo ")。get(0)
よりユニバーサルにして複数のタイプを受け入れる場合は、渡される可能性のある各タイプを検出し、各タイプからDOMオブジェクトを取得して、すべてを同じように処理できるようにするコードを作成する必要があります。たとえば、DOMオブジェクトのjQueryオブジェクトのいずれかを検出する場合は、次のように行うことができます。
function doSomething(element) {
// normalize element to be just a DOM object
// if it's a jQuery object, then reach in to get the first DOM object
if (element.jquery) {
element = element.get(0);
}
// do something with element here which is a DOM object
}
他のライブラリからのオブジェクトも検出したい場合は、他のライブラリごとに同様の検出コードを記述し、他のライブラリのオブジェクトから実際のDOMオブジェクトを取得する必要があります。