2017-06-20 43 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

相关问题