JQuery模块分析及其实现第三部分属性模块功能及实现,接第二部分!
css
方法
itcast.each
方法: 遍历数组或伪数组
attr
方法,定义两个参数:属性节点名字 name
以及属性节点值dom
元素的属性节点值)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
},
dom
元素的 innerHTML
属性值dom
元素的 innerHTML
属性itcast
对象上的第一个 dom
元素的 innerHTML
属性值itcast
对象上的每一个 dom
元素设置 innerHTML
属性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;
});
}
},
dom
元素文本值textContent
属性textContent
返回结果集中每一个 dom
元素的文本节点值innerText
返回结果集中每一个 dom
元素的文本节点值itcast
对象上的每一个 dom
元素设置文本节点值.textContent
属性,就是用该属性设置文本innerText
来设置文本.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;
}
});
}
},
value
属性)attr
相似for
, class
是保留字或关键字不能作为对象属性名称,所以要创建一个对象,需要转换这类的属性propFix
对象,存储上述属性到这属性名称的映射关系dom
对象添加属性itcast
对象上的第一个 dom
对象的指定属性值dom
对象添加单个属性propFix
对象拿到映射后的属性名称undefined
,就用映射后的属性名来操作 dom
对象dom
对象.// 属性模块
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;
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有