jquery中用$获取dom元素的区别

在Jquery中,使用$(this)获取当前元素执行removeClass方法是正常的,但是使用如下方式则会报错
var doms= $(".layui-nav-itemed");
console.log($(this));
console.log($(this));
if(doms.length>1){
console.log(doms[0]);
doms[0].removeClass("layui-nav-itemed");
}

控制台显示如下

clipboard.png

实在是没搞懂到底为啥报错。。。

阅读 3.9k
6 个回答

$()获取的是jq对象,可以使用jq的方法。
var doms= $(".layui-nav-itemed");这里你只是把获取到的对象赋给了原生jsDOM。原生js是不可以使用jq的方法的

jQuery帮助我们的就是更快速的获取dom节点和提供的方法以及链式调用,你的第一句话的doms实际上jquery帮助你得到的dom原生节点集,而原生节点是不具备jquery的removeClass方法的,如果想要使用jquery的方法,最后一句可以改为$(doms[0]).removeClass,就可以了

clipboard.png
操作第一个元素把背景色从黑色改成了暗红色

clipboard.png

doms[0]代表的是dom对象,而这个方法是jquery对象的方法

doms[0] 是一个原生的HTMLElement,不是Jquery 对象,当然不能用jquery的方法啦

doms[0]是原生js的dom节点了,这个没有jq的一系列方法了,应该用
doms[0].classList.remove("layui-nav-itemed")

首先需要明确:

1.$() 方法获取的是 jQuery对象,可以使用jQuery的所有方法
2.jQuery对象和 DOM对象相互转化的方法:
    JQuery 转 DOM方法:
    var $v =$("#v") ; //jQuery 对象 
    var v=$v[0];      //DOM 对象 
    
    DOM 转 JQuery:
    var v=document.getElementById("v"); //DOM对象 
    var $v=$(v); //jQuery对象 

明确了上面的两点之后再看这个问题:
doms[0] 已经是 DOM 对象了,DOM 对象是没有 removeClass 方法,因为不是 jQuery 对象
可以使用 $(doms[0]).removeClass

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题