2017-06-20 8 views
1

2つは同じものだと思いました。jQueryのUIがgetElementByIdでドラッグできないのはなぜですか?

$("#SomeId") 

document.getElementById("SomeId") 

は私が間違っていると仮定ので、次の作品これらのいずれもがそうであるように

$("#SomeId").draggable(); 

document.getElementById("SomeId").draggable(); 

または

var x = document.getElementById("SomeId"); 
x.draggable(); 

ここでの違いは何ですか? JQueryを使用して選択した要素のみがJqueryUIで動作するように、JQueryはいくつかのトリックを行い、登録していますか?

これまでのところ、私のプロジェクトはバニラのJavascriptだけでしたが、今はJQueryを使用する必要がありますので、移行しています。私はこれを回避し、修正のためのいくつかのアイデアを持っている方法を知っていますが、私の質問は約なぜこれは理解がより重要なので動作しません。

+1

DOMのものではないので、jQueryの一部です。 – epascarello

答えて

3

jqueryセレクタが単なる要素以上のものを取得するため、これは機能しません。これはjqueryオブジェクトを返すので、.draggable()のようなjquery-eeの処理を行うことができます。

あなたはjavascriptのgetElementById()メソッドを使用する場合は、あなたが上にあなたの例を変更した場合にそれを動作させることができます。

jQueryオブジェクトに無地javascriptオブジェクトをオンにします
var x = document.getElementById("SomeId"); 
$(x).draggable(); 

jqueryオブジェクトとjs domオブジェクトの両方をconsole.log()で別々に表示すると、それらが非常に異なることがわかります。

+0

私は考えていませんでした...あなたが示唆したように調査します。 – MyDaftQuestions

+1

これを行うことで効率の損失や利得がありますか? –

+0

私はテストしていませんが、私の推測はありません。私は、jqueryセレクタが文字列が渡されるときに標準のjsセレクタを使用することはほとんど確信しています。その代わりに要素を渡すだけで、その要素の一部としてjqueryオブジェクトが返されるだけです。だからどちらの方法でも、あなたは1つのdomルックアップを行い、1つのjqueryが戻るでしょう。もし私が別のものを選ぶ必要があったならば、jqeuryセレクタの方がコード効率が良いと思います。さらに読みやすくなっています。 – Nieminen

関連する問題