Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JQuery分析及实现part3之属性模块功能及实现

JQuery分析及实现part3之属性模块功能及实现

作者头像
ihoey
发布于 2018-10-31 08:33:11
发布于 2018-10-31 08:33:11
52400
代码可运行
举报
文章被收录于专栏:梦魇小栈梦魇小栈
运行总次数:0
代码可运行

JQuery模块分析及其实现第三部分属性模块功能及实现,接第二部分!

知识点复习

  1. css 方法
    • 如果只传入一个参数
      • 如果参数类型为对象,表示同时设置多个样式
      • 如果参数类型为字符串,表示获取指定的样式值
    • 如果传入的两个参数,表示设置单个样式值
  2. itcast.each 方法: 遍历数组或伪数组
    • 第一个参数,指定遍历的对象
    • 第二个参数,指定的回调函数,对遍历到的每一个元素,进行相关处理

attr方法( setAttribute 和 getAttribute )

  1. 功能: 获取(设置)属性节点值
  2. 实现思路
    • 给原型添加 attr 方法,定义两个参数:属性节点名字 name 以及属性节点值
    • 如果只传入一个参数
      • 如果参数类型为对象,表示设置多个节点值
      • 否则获取指定的属性节点值(默认获取第一个 dom 元素的属性节点值)
    • 如果传入两个参数,表示设置单个属性节点值.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
attr: function(name,value){
	//只传入一个参数
	if(value == undefined){
		//如果类型为对象,表示设置多个属性
		if(typeof name ==='object'){
			//遍历itcast上的每一个dom元素,并设置属性节点值
			this.each(function(v){
				//枚举name对象上的每一个属性
				for(var k in name){
					v.setAttribute(k, name[k]);
				}
			});
		} else { //如果类型为字符串,获取属性节点值
			if(!this[0]) return null;
			return this[0].getAttribute(name);
		}
	}else { //传入两个参数,表示设置单个属性节点值
		this.each(function(v) {
			v.setAttribute(name, value)
		});
	}
	return this
},

html方法

  1. 功能:
    • 不传参数,表示获取指定 dom 元素的 innerHTML 属性值
    • 否则,表示设置指定 dom 元素的 innerHTML 属性
  2. 实行思路
    • 判断是否传入参数
    • 如果没穿,获取 itcast 对象上的第一个 dom 元素的 innerHTML 属性值
    • 否则,给 itcast 对象上的每一个 dom 元素设置 innerHTML 属性
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
html: function(html) {
	//如果没有给html传值,表示获取
	if(html==undefined){
		//如果icast没有任何dom元素,就返回一个期望值,即空字符串
		//如果有的话,就返回一个dom元素的innerHTML属性值
		return this[0] ? this[0].innerHTML : '';
	}else{//如果给html船只,给itcast对象上的每一个dom元素设置innerHTML属性
		return this.each(function(v){
			v.innerHTML = html;
		});
	}
},

text方法

  1. 功能
    • 不传值,表示获取文本节点(返回的是后代中所有文本节点值)
    • 传值,设置指定 dom 元素文本值
  2. 实现思路
    • 如果不传值,优先考虑浏览器是否支持 textContent 属性
      • 如果支持,就使用 textContent 返回结果集中每一个 dom 元素的文本节点值
      • 否则,就是用 innerText 返回结果集中每一个 dom 元素的文本节点值
    • 如果传值,给 itcast 对象上的每一个 dom 元素设置文本节点值.
      • 如果支持 textContent 属性,就是用该属性设置文本
      • 否则,就是用 innerText 来设置文本.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
text: function(text) {
	// 如果没有传值,表示获取文本值
	if(text == undefined){
		// 定义结果变量,存储每个dom元素的文本
		var ret = '';
		// 遍历每一个dom元素
		this.each(function(v) {
			// 如果支持textContent,使用其获取文本,累加到ret上
			ret += 'textContent' in document ?
				v.textContent :
				v.innerText.replace(/\r\n/g, '');
		});
		// 返回所有文本
		return ret;
	} else { // 如果传值了,表示为每个dom设置文本
		return this.each(function(v) {
			// 如果支持textContent,就使用该属性为当前dom元素设置文本节点值
			// 否则,使用innerText设置文本节点值。
			if('textContent' in document){
				v.textContent = text;
			} else {
				v.innerText = text;
			}
		});
	}
},

val方法

  1. 功能( value 属性)
    • 如果不传值,表示获取输入框的文本值
    • 如果传值, 表示给输入框 设置文本
  2. 实现思路
    • 如果不传值,表示获取输入框的文本值(获取第一个文本框值)
    • 如果传值,表示给输入框 设置文本
      • 遍历每一个输入框,同时给其设置文本val: function(value) { // 如果没有传值,表示获取第一个dom元素的value属性值 // 如果itcast对象上没有任何dom元素,返回空字符串 if(value == undefined){ return this[0] ? this[0].value : ''; } else {// 否则,为每一个dom元素设置value属性值 return this.each(function() { this.value = value; }); } }

prop方法

  1. 功能:和 attr 相似
    • 注意: 有些属性名称,比如 for , class 是保留字或关键字不能作为对象属性名称,所以要创建一个对象,需要转换这类的属性
    • 定义 propFix 对象,存储上述属性到这属性名称的映射关系
    • 如果只传入一个参数
      • 类型为对象,同时给 dom 对象添加属性
      • 类型为字符串,获取 itcast 对象上的第一个 dom 对象的指定属性值
    • 如果传入的参数,给所有的 dom 对象添加单个属性
    • 细节: 无论是设置还是获取属性,在操作之前,先要从 propFix 对象拿到映射后的属性名称
      • 如果拿到的心的属性名称不为 undefined ,就用映射后的属性名来操作 dom 对象
      • 否则,那么久使用旧的属性名称来操作 dom 对象.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 属性模块
itcast.propFix = {
	'for': 'htmlFor',
	'class': 'className'
};
itcast.each([
	"tabIndex",
	"readOnly",
	"maxLength",
	"cellSpacing",
	"cellPadding",
	"rowSpan",
	"colSpan",
	"useMap",
	"frameBorder",
	"contentEditable"
], function() {
	itcast.propFix[this.toLowerCase()] = this;
});
prop: function(name, value) {
	// 如果没有给value传值
	var prop;
	if (value == undefined) {
		// 并且name的类型为 对象,表示给每一个dom对象添加多个属性
		if (typeof name === 'object') {
			this.each(function() {
				for (var k in name) {
					// 首先从propFix对象上获取属性名字
					// 如果有,就使用新的属性名字
					// 如果没有,就使用原来的属性名字
					prop = itcast.propFix[k] ? itcast.propFix[k] : k;
					this[prop] = name[k];
				}
			});
		} else { // 如果name的类型 为字符串,表示获取第一个dom对象的指定属性值
			prop = itcast.propFix[name] ? itcast.propFix[name]: name;
			return this.length > 0 ? this[0][prop] : null;
		}
	} else { // 如果传入两个参数,表示给每一个dom对象添加单个属性
		// 遍历itcast上的每一个dom对象,添加属性
		prop = itcast.propFix[name] ? itcast.propFix[name]: name;
		this.each(function() {
			this[prop] = value;
		});
	}
	// 实现链式编程
	return this;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-11-202,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JQuery最全常用方法指南
ready(fn); $(document).ready()注意在body中没有onload事件,否则该函数不能执行。在每个页面中可以 有很多个函数被加载执行,按照fn的顺序来执行。 bind(type, [data], fn) 为每一个匹配元素的特定事件(像click)绑定一个或多个事件处理器函数。可能的事件属性有:blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error one(type, [data], fn) 为每一个匹配元素的特定事件(像click)绑定一个或多个事件处理器函数。在每个对 象上,这个事件处理函数只会被执行一次。其他规则与bind()函数相同。
江一铭
2022/06/17
11.2K0
jQuery原理(属性操作相关方法)
attr方法 设置或者获取元素的属性节点值 //属性操作相关的方法 kjQuery.prototype.extend({ attr: function (attr, value) { // 1. 判断是否是字符串 if (kjQuery.isString(attr)) { if (arguments.length == 1) { return this[0].getAttribute(attr);
Dreamy.TZK
2020/06/28
5690
为什么要学jquery
js库:把一些常用到的方法写到一个单独的js文件,使用的时候直接去引用这js文件就可以了。
张哥编程
2024/12/19
1800
JQuery分析及实现part4之DOM操作模块功能及实现
JQuery模块分析及其实现第四部分属性部分功能及实现,接第三部分! appendTo 方法 功能:将结果集中的元素 追加到指定的 dom 元素上. 语法:<target对象>.appendTo(target) 实现思路 定义 appendTo 方法,声明一个形参 target .追加到目标 dom 元素 选择器 dom 元素 dom 数组 为了操作方便,将 target 类型统一为 itcast 对象,去 itcast 函数走一圈,出来就是 itcast 对象. 遍历 this 上的每一个 dom 元素,
ihoey
2018/10/31
1.3K0
全面入门jQuery最佳实践(二)-jQuery的属性与样式1 .attr()与.removeAttr()2 html()及.text()
每个元素都有一个或者多个特性,这些特性的用途就是给出相应元素或者其内容的附加信息。如:在img元素中,src就是元素的特性,用来标记图片的地址。
JavaEdge
2018/08/02
6920
JQuery分析及实现part5之事件模块功能及实现
JQuery模块分析及其实现第五部分事件部分功能及实现,接第四部分! remove 方法 功能:将筛选出来的所有 dom 元素删除掉 实现思路 遍历 this 上的所有 dom 元素; 获取当前 dom 元素的父节点,调用 removeChild 方法删除自己; 循环结束,返回 this . remove: function() { return this.each(function() { this.parentNode.removeChild(this); }); },
ihoey
2018/10/31
6300
从零开始学 Web 之 DOM(三)innerText与innerHTML、自定义属性
大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程。此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注。在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧! 一、兼容代码 1、封装 innerText 和 TextContent // 设置任意标签的文本内容为任意内容 function setText(element, text) { (t
Daotin
2018/08/31
1.3K0
Vue——node-ops.ts【十三】
node-ops.ts位于src/platforms/web/runtime/node-ops.ts,主要封装了 DOM 操作的 API;
思索
2024/08/15
680
JQuery分析及实现part7之 Ajax 模块功能及实现
JQuery模块分析及其实现第七部分 Ajax 部分功能及实现,接第六部分! Ajax 请求流程 创建一个请求对象 function createRequest() { return window.
ihoey
2018/10/31
4250
JQuery分析及实现part6之动画模块功能及实现
JQuery模块分析及其实现第六部分动画部分功能及实现,接第五部分! 动画原理 根据人眼具有 0.1 秒的视觉残留,只有在一秒切换至少 24 个画面就会产生动画 动画的基本结构 function animate() { function render() { //动画 } window.setInterval(render, time); } 小动画案例 奔跑的小矩形 <html lang="en"> <head> <meta charset="UTF-8"> <title>奔跑吧矩形</ti
ihoey
2018/10/31
6620
读Zepto源码之属性操作
对角另一面
2017/12/27
1.8K0
03-老马jQuery教程-DOM操作(上)
根据文章内容总结摘要。
老马
2017/12/27
1.7K0
jQuery
    2.jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。它的宗旨就是:“Write less, do more.“
changxin7
2022/05/06
9.1K0
jQuery
jQuery原理(DOM操作相关方法)
删除所有的元素或指定元素。判断是否传入参数,如果传入参数,则删除指定元素,否则删除全部。
Dreamy.TZK
2020/06/28
5630
前端成神之路-02_jQuery
​ jQuery 常用属性操作有三种:prop() / attr() / data() ;
海仔
2021/01/13
2.3K0
[Java面试九]脚本语言知识总结.
核心内容概述 1.JavaScript加强,涉及到ECMAScript语法、BOM对象、DOM对象以及事件。 2.Ajax传统编程。 3.jQuery框架,九种选择器为核心学习内容 4.JQuery UI插件 5.jQuery Ajax编程 6.jQuery第三方插件 7.反向Ajax编程(彗星) 一、JavaScript基础加强 JavaScript是在浏览器内容运行,无需编译、解释执行动态脚本语言,是一种弱类型语言,所有变量使用var定义。 JavaScript的3个组成部分分别为:核心(ECMAScr
一枝花算不算浪漫
2018/05/18
5.2K0
JQuery常用命令
②. document.getElementsByName('uname')(表单元素)
越陌度阡
2020/11/26
6.5K0
JS魔法堂:被玩坏的innerHTML、innerText、textContent和value属性
一、前言                                 由于innerText并非W3C标准属性,因此我们无法在FireFox中使用它(修正:FF45+已经支持innerText属性),一般情况下我们可以使用textContent来代替,但它两者是否就能完全等同呢?在坑爹的表单元素(如input、textarea等)中表现是否依旧诡异呢?文本将记录一些实验结果,避免日后被玩坏。 二、innerHTML                             由于innerText和text
^_^肥仔John
2018/01/18
4.3K0
01-老马jQuery教程-jQuery入口函数及选择器
前言 这套jQuery教程是老马专门为寒门子弟而录制,希望大家看到后能转发给更多的寒门子弟。视频都是免费,请参考课程地址:https://chuanke.baidu.com/s5508922.html
老马
2017/12/20
2.5K0
前端学习(47)~DOM简介和DOM操作
DOM:Document Object Model,文档对象模型。DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。目的其实就是为了能让js操作html元素而制定的一个规范。
Vincent-yuan
2020/03/19
1.8K0
相关推荐
JQuery最全常用方法指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验