2017-06-20 45 views
1

我以爲2是相同的。爲什麼jQuery UI可拖動不能使用getElementById

$("#SomeId") 

document.getElementById("SomeId") 

我想我是錯的,因爲下面的作品

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

凡爲這些都不做

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

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

我的問題是這裏的區別是什麼? JQuery是否做了一些小技巧並註冊,只有通過JQuery選擇的元素才能與JqueryUI一起使用?

到目前爲止,我的項目只有香草Javascript,但現在我必須使用JQuery,所以我正在遷移。我知道如何解決這個問題,並有一些修復的想法,但我的問題是關於爲什麼這不起作用,因爲理解更重要。

+1

因爲它是jQuery的一部分,而不是DOM ... – epascarello

回答

3

這不起作用,因爲jquery選擇器獲取的不僅僅是元素。它返回一個jquery對象,允許你爲它們做jquery-ee的東西,比如.draggable()

如果你想使用JavaScript getElementById()方法,就可以讓你要改變上面你的榜樣它的工作:

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

這將打開普通的JavaScript對象轉換成jQuery對象。

如果你分別使用console.log()jquery對象和js dom對象,你會發現它們非常不同。

+0

我不知道...並將按您的建議進行調查。 – MyDaftQuestions

+1

這樣做會導致效率損失或收益嗎? –

+0

我還沒有測試,但我的猜測不是。我幾乎可以肯定的是,jquery選擇器在傳入字符串時使用標準js選擇器。因此,當您僅傳入元素時,所需做的就是返回包含該元素的jquery對象作爲其一部分。所以無論哪種方式,你都會做一個dom查找,並返回一個jquery。如果我不得不選擇一個,我會假設直接選擇jqeury選擇器會更有效率,如果不僅僅因爲它會執行少一行代碼。另外它更具可讀性。 – Nieminen

相關問題