首先来个例子:

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

那下面我们就以这个为例来剖析下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. 掌握 3 个搜索技巧,在 GitHub 上快速找到实用软件资源

    GitHub 作为目前广大程序猿最大的游乐场,在今年 6 月被 微软 以 75 亿美元价值的微软股票收购,GitHub 再次成为业界讨论的焦点.GitHub 以自由开放的定位吸引了相当多的个人开发者和 ...

  2. MySQL之pymysql

    pymysql的安装 pip install PyMySQL 连接数据库   import pymysql db = pymysql.connect("数据库ip","用 ...

  3. AcWing:240. 食物链(扩展域并查集 or 带边权并查集)

    动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形. A吃B, B吃C,C吃A. 现有N个动物,以1-N编号. 每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用 ...

  4. django 问题总结(八)

    1.第一步创建项目,不成功,命令不报错一直不创建文件夹 django-admin.py startproject mysite2 原因: django-admin.py ,py文件的默认打开方式不对, ...

  5. JAVA之G1与CMS垃圾回收

    G1 GC,全称Garbage-FirstGarbage Collector,通过-XX:+UseG1GC参数来启用,作为体验版随着JDK 6u14版本面世,在JDK 7u4版本发行时被正式推出,相信 ...

  6. Qt事件机制浅析

    Qt事件机制 Qt程序是事件驱动的, 程序的每个动作都是由幕后某个事件所触发.. Qt事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. Qt事件的类型很多, 常见的qt的事件如下: 键盘事 ...

  7. Python接口测试-利用登录后的session用到登录后的接口中

    有些接口是在登录后才能调用的,例如“立即出借”只有在登录后才能到出借窗口,解决: 主要是添加了: s =requests.session() 完整代码: '''登录 ''' print('*'*100 ...

  8. SRCNN代码分析

    代码是作者页面上下载的matlab版.香港中文大学汤晓鸥教授.Learning a Deep Convolutional Network for Image Super-Resolution. htt ...

  9. leetcode312 戳气球

    动态规划 time O class Solution { public: int maxCoins(vector<int>& nums) { nums.insert(nums.be ...

  10. redis多实例与主从同步及高级特性(数据过期机制,持久化存储)

    redis多实例 创建redis的存储目录 vim /usr/local/redis/conf/redis.conf #修改redis的配置文件 dir /data/redis/ #将存储路径配置修改 ...