首先来个例子:

我们在登陆或者注册一些网站时,如果某一项点过了但没填,鼠标移走后是不是经常看到网站有相应的红色字体提示呢?

那下面我们就以这个为例来剖析下jQuery和原生JS的一些区别,来上代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link href="bootstrap-3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="bootstrap-3.3.7/js/bootstrap.min.js"></script>
<style> /*字体设置为红色*/
.c1{
color: red;
}
</style>
</head>
<body>
<div class="container">
<form action="">
<div class="username"><label for="i1">用户名
<input type="text" id="i1">
<span></span>
</label></div> <div class="password"><label for="i2">密码
<input type="text" id="i2">
<span></span>
</label></div>
<div><label for="">
<input type="submit" id="d1" value="提交">
</label></div>
</form>
</div> <script>
var $d1Ele = $("#d1");
var $i1Ele = $("#i1");
var $i2Ele = $("#i2"); //点击提交按钮,如果用户没有输入,则提示给用户名框、密码框下面的span插入提示文本,并给字体标注红色样式
$d1Ele.click(function () {
if (!$i1Ele[0].value){
$i1Ele.parent().children()[1].innerText = "用户名不能为空";
$i1Ele.parent().children()[1].classList.add("c1") }
if(!$i2Ele[0].value){
$i2Ele.parent().children()[1].innerText = "密码不能为空";
$i2Ele.parent().children()[1].classList.add("c1")
}
return false
});
//鼠标焦点到用户名框,清除提示文字,清除字体样式
$i1Ele.focus(function () {
$i1Ele.parent().children()[1].innerText = "";
$i1Ele.parent().children()[1].classList.remove("c1")
});
//鼠标焦点到密码框,清除提示文字,清除字体样式
$i2Ele.focus(function () {
$i2Ele.parent().children()[1].innerText="";
$i2Ele.parent().children()[1].classList.remove("c1")
});
//用户名框失去鼠标焦点,再判断用户是否输入,未输入则继续提示
$i1Ele.blur(function () {
if (!$i1Ele[0].value){
$i1Ele.parent().children()[1].innerText = "用户名不能为空";
$i1Ele.parent().children()[1].classList.add("c1")
}
});
//密码框失去鼠标焦点,再判断用户是否输入,未输入则继续提示
$i2Ele.blur(function () {
if (!$i2Ele[0].value){
$i2Ele.parent().children()[1].innerText = "密码不能为空";
$i2Ele.parent().children()[1].classList.add("c1")
}
}) </script> </body>
</html>

页面打开效果:

直接点击提交后显示效果:

随后鼠标点击用户名框时的效果:

由此,我们可以实现登陆或注册页对用户的提示。

我们来归纳其中的知识点

查找标签

jQuery和原生JS的区别

JS查找某个标签:

   var i1Ele = document.getElementsByClassName(".top")   //类名查找
var i1Ele = document.getElementsByTagName("p") //标签名查找
var i1Ele = document.getElementById("#i1") //ID查找

jQuery查找某个标签:

    var $i1Ele = $("#i1")   //id查找
var $i1Ele = $(".top") //类查找
var $i1Ele = $("p") //标签查找
var $i1Ele = $(":text") //input文本框查找
var $i1Ele = $("input:checked") //这里的input不加会默认把option的含checked的标签也检索到,所以在用checked去检索input标签时需要留意
var $i1Ele = $(":button") //input按钮标签查找

JS查找节点标签:

  var test = document.getElementById("i1");
  var parent = test.parentNode; // 父节点
  var chils = test.childNodes; // 全部子节点
  var first = test.firstChild; // 第一个子节点
  var last = test.lastChile; // 最后一个子节点 
  var previous = test.previousSibling; // 上一个兄弟节点
  var next = test.nextSibling; // 下一个兄弟节点

jQuery查找节点标签:

$("#test1").parent(); // 父节点
$("#test1").parents(); // 全部父节点
$("#test1").parents(".mui-content");
$("#test").children(); // 全部子节点
$("#test").children("#test1");
$("#test").contents(); // 返回#test里面的所有内容,包括节点和文本
$("#test").contents("#test1");
$("#test1").prev(); // 上一个兄弟节点
$("#test1").prevAll(); // 之前所有兄弟节点
$("#test1").next(); // 下一个兄弟节点
$("#test1").nextAll(); // 之后所有兄弟节点
$("#test1").siblings(); // 所有兄弟节点
$("#test1").siblings("#test2");
$("#test").find("#test1");

JS标签对象与jQuery的相互转换

js对象转jQuery对象:$(JS对象)         JS对象外套$() 即可

jQuery对象转js对象:$("#i1")[index]         取索引即可


JS原生对象和jQuery对象对属性操作的相似与不同

jQuery属性操作

jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作

  • html属性操作:是对html文档中的属性进行读取,设置和移除操作。比如attr()、removeAttr()
  • DOM属性操作:对DOM元素的属性进行读取,设置和移除操作。比如prop()、removeProp()
  • 类样式操作:是指对DOM属性className进行添加,移除操作。比如addClass()、removeClass()、toggleClass()
  • 值操作:是对DOM属性value进行读取和设置操作。比如html()、text()、val()
获取:
$('div').attr('id')
设置
$('div').attr('class','box')
设置多个值,键值对存储
$('div').attr({name:'hahaha',class:'happy'}) //删除单个属性
$('#box').removeAttr('name');
$('#box').removeAttr('class');
//删除多个属性
$('#box').removeAttr('name class'); 返回属性的值//与attr区别是返回值不同,prop返回布尔值
$(selector).prop(property)
设置属性和值
$(selector).prop(property,value)
设置多个属性和值
$(selector).prop({property:value, property:value,...}) $('div').addClass("box");//追加一个类名到原有的类名
$('div').addClass("box box2");//追加多个类名
$('div').removeClass('box');移除指定的类(一个或多个)
$('div').removeClass(); 移除全部的类
$(this).toggleClass('active'); 没有则添加,有则删除,多和绑定事件配合使用 text() 获取匹配元素包含的文本内容,一般配合trim使用
console.log($('.box').text().trim()); val()用于表单控件中获取值,比如input textarea select等等
$('input').val('设置了表单控件中的值'); 文档操作:
父元素.append(子元素)
$('ul').append('<li class="item1">苏东坡</li>'); 如果追加的是jquery对象那么这些元素将从原位置上消失。简言之,就是一个移动操作 子元素.appendTo(父元素)
父元素.prepend(子元素);前置添加, 添加到父元素的第一个位置
$('ul').prepend('<li>我是第一个</li>')
子元素.prependTo(父元素);前置添加, 添加到父元素的第一个位置
$('<li>我是第一个</li>').prependTo(‘ul’) 父元素.before(子元素);
子元素.inserBefore(父元素);在匹配的元素之前插入内容 修改/替换
replaceWith():替换
replaceAll() :替换所有
$('<p>哈哈哈</p>').replaceAll('h2'); 删除
remove() 删除节点后,事件也会删除(简言之,删除了整个标签)
detach() 删除节点后,事件会保留
$('ul').remove();
$('button').detach(); empty() 清空选中元素中的所有后代节点
//清空掉ul中的子元素,保留ul
$('ul').empty();

  

JS原生对象的属性操作

Class属性操作
添加Class
document.getElementById('head').classList.add('add') //('add1','add2')
//<div id="head" class="add"></div> 删除Class
document.getElementById('head').classList.remove('add')
//<div id="head"></div> 切换class toggle
document.getElementById('head').classList.toggle('add')
//打印true 代表添加成功,<div id="head" class="add"></div>
//打印false为删除成功, <div id="head"></div> 是否存在Class
document.getElementById('head').classList.contains('add')
//返回 true和false 返回类名在元素中的索引值。索引值从 0 开始。
<div id="head" class="add remove"></div>
document.getElementById('head').classList.item(1)
//remove 属性增删操作:
添加属性元素
document.getElementById('head').setAttribute('set', 'value');
//<div id="head" set='value'></div> 获取属性
document.getElementById('head').getAttribute('set')
//"value" 不存在为null 原生DOM增删:
//已有元素前插入元素insertBefore
<ul id="box">
<li>001</li>
</ul>
var newItem=document.createElement("li")
var lis=document.getElementsByTagName("li");
var curItem = document.getElementById('box')
newItem.innerHTML="002";
curItem.insertBefore(newItem,lis[0]);
//<ul id="box">
// <li>002</li>
// <li>001</li>
//</ul> 已有元素内追加元素appendChild
<ul id="box">
<li>001</li>
</ul>
var newItem=document.createElement("li")
var curItem = document.getElementById('box')
newItem.innerHTML="002";
curItem.appendChild(newItem);
//<ul id="box">
// <li>001</li>
//</ul> 为元素增加文本innerText 和 innerHTML
<p></p>
document.getElementsByTagName("p").innerText = "呵呵"
//<p>呵呵</p> //innerText和innerHTML用法一样,但innerHTML可以识别标签,innerText只用作插入文本

JS原生对象和jQuery对象事件绑定的区别

JS原生对象绑定事件语法:js对象.onXXX = 触发函数

document.getElementById("#d1").onclick = function(){
if (!document.getElementById("#i1").value) {
alert("请输入内容!");
} }

  

jQuery对象绑定事件语法:$(".class1").on(事件名,触发函数)

$("#di").on("click",function(){

         if (!$("#i1")[0].value){
alert("请输入内容");
}
})
或者
$("#di").click(function(){
if (!$("#i1")[0].value){
alert("请输入内容"); })

常用绑定事件:

原生JS jQuery 释义
onclick click(handler) 单击
  dbclick(handler)  双击
  mouseenter(handler)  鼠标移入事件
  mouseleave(handler) 鼠标离开事件
  focus(handler)  获得焦点事件(input框经常用)
onblur blur 失去焦点事件
  keydown(handler)  键盘按下事件
  keyup  键盘弹起来事件
onchange change(handler)  文本框值改变,下拉列表值改变等
  select()   用于input 文本框里的内容都被选中

通过案例来剖析JQuery与原生JS的更多相关文章

  1. jQuery与原生js实现banner轮播图

    jQuery与原生js实现banner轮播图: (jq需自己加载)(图片需自己加载) <!DOCTYPE html> <html> <head> <meta ...

  2. 通过游戏认识 --- JQuery与原生JS的差异

      前言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架).jQuery设计的宗旨是“write ...

  3. 原生JS的使用,包括jquery和原生JS获取节点、jquery和原生JS修改属性的比较

    一.前言 相比于JS这条直达终点.满是荆棘的小路,jquery无疑是康庄大道了,足够的简洁.易用给了它辉煌的地位.然而,毕竟是绕着道的插件,当小路走着走着变成大路的时候,曾经的大路也就失去了他自身的优 ...

  4. jquery与原生JS实现增加、减小字号功能

    预览效果: 实现代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  5. 用jQuery基于原生js封装的轮播

    我发现轮播在很多网站里面都用到过,一个绚丽的轮播可以为网页增色不少,最近闲来无事,也用原生js封装了一个轮播,可能不像网上的插件那么炫,但是也有用心去做.主要用了闭包的思想.需要传递的参数有:图片地址 ...

  6. JQuery和原生JS跨域加载JSON数据或HTML。

    前提:有时候需要在网页上,加载另一个网站上的数据.或者加载另一个网站上的一个页面.Js的Ajax请求不具备跨域功能,可以使用JQuery来实现. 网页端JS代码: $(function () { $. ...

  7. 类似jQuery的原生JS封装的ajax方法

    一,前言: 前文,我们介绍了ajax的原理和核心内容,主要讲的是ajax从前端到后端的数据传递的整个过程. Ajax工作原理和原生JS的ajax封装 真正的核心就是这段代码: var xhr = ne ...

  8. jQuery和原生JS的对比

    原生JS的缺点: 不能添加多个入口函数(window.onload),如果添加了多个,后面的会把前面的覆盖掉 原生js的api名字太长,难以书写,不易记住 原生js有的代码冗余 原生js中的属性或者方 ...

  9. JavaWeb_Ajax通过JQuery和原生js异步传输数据

    菜鸟教程 传送门 AJAX 优点:在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容 XMLHttpRequest 对象 传送门 (一) [JQuery]定时发送ajax请求 (二) ...

随机推荐

  1. redis序列化和反序列化

    RedisTemplate中需要声明4种serializer,默认为“JdkSerializationRedisSerializer”: 1) keySerializer :对于普通K-V操作时,ke ...

  2. Spring Boot 前期篇

    在学习springboot之前,学习一下Spring的java配置. 1. Spring的发展 1.1. Spring1.x 时代 在Spring1.x时代,都是通过xml文件配置bean,随着项目的 ...

  3. Semantic 导航条

    <!DOCTYPE html> <html>       <head>         <meta charset="UTF-8"> ...

  4. Luogu P3527 [POI2011]MET-Meteors 整体二分

    思路:整体二分 提交:4次 错因:树状数组开的$int$ 题解: 二分操作序列,将仅用$[l,md]$即可满足要求的国家递归到左半边,将仅用$[l,md]$不能满足要求的国家,把他们的要求去掉左半边的 ...

  5. Noip 模拟题 T2 数字对

    2.数字对 [题目描述] 小H是个善于思考的学生,现在她又在思考一个有关序列的问题. 她的面前浮现出一个长度为n的序列{ai},她想找出一段区间[L, R](1 <= L <= R < ...

  6. Django-视图函数/模板渲染/过滤器

    一.Django的视图函数 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个 ...

  7. oracle面试题1

    1.题目要求 已知关系模式:S (SNO,SNAME)学生关系.SNO 为学号,SNAME 为姓名C (CNO,CNAME,CTEACHER)课程关系.CNO 为课程号,CNAME 为课程名,CTEA ...

  8. 比较全的解释了:JAVA反射机制

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制 ...

  9. Leetcode题目48.旋转图像(中等)

    题目描述: 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1 ...

  10. phpinfo中敏感信息记录

    比赛中或者渗透中如果遇到phpinfo,从里面发现的一些线索能够对后续的渗透和解题帮助很大,这里记录总结一下目前网上比较常用的的. 下图来源于:https://seaii-blog.com/index ...