jquery 中 $('selector') 和 $('selector')[0] 之间的区别

MrS*_*ana 4 html javascript jquery dom object

假设我有一个<div class="test" style="width:200px"></div>,请考虑以下事项:

var m = $('.test')[0];
var $md = $(m);
console.log($md.width()); //200

var o = $('.test');
console.log(o.width());  // 200


console.log(m);   // <div class="test" style="width:200px">
console.log($md);  // Object{ context: <div.test> ..... } 
console.log(o);   // Object{ length:1 , ..... }
Run Code Online (Sandbox Code Playgroud)

基本上我可以在或上应用该width方法,那么如果输出相同,第一种方法和第二种方法有什么区别?我看到 和都是对象,但在控制台输出中它们并不完全相同,它们有何不同?谢谢。var $mdvar o
mdo

Pan*_*het 5

这里你得到第一个元素匹配的选择器,它返回纯js实例。

var m = $('.test')[0]; 
Run Code Online (Sandbox Code Playgroud)

在这里,您再次将其包装在 jQuery 对象中。

var $md = $(m);
Run Code Online (Sandbox Code Playgroud)

由于width()方法返回集合中第一个元素的宽度,因此方法之间没有区别,直到页面上有多个.test元素并且想要像这样更改它们:

 $('.test').width(100)
Run Code Online (Sandbox Code Playgroud)

.test此代码将页面上每个元素的宽度设置为 100px。

但这只会继续更改集合中第一个匹配的元素:

 var el = $('.test')[0];
 $(el).width(100);
Run Code Online (Sandbox Code Playgroud)

有基于您的代码的综合示例,我认为最好这样写:

$('.test').first().width(100);
Run Code Online (Sandbox Code Playgroud)

或者

$('.this:first').width(100);
Run Code Online (Sandbox Code Playgroud)