当前位置: 首页 > 图文教程 > 网络编程 > Javascript > Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3

Javascript
JavaScript 解析Json字符串的性能比较分析代码
js 日期字符串截取分割成单个具体的日期(2009-12-30 13:28:29)
javascript 倒计时代码
javascript 语法基础 想学习js的朋友可以看看
javascript获取元素文本内容的通用函数
javascript 动态设置已知select的option的value值的代码
jquery 简单的图片展示效果
js textarea自动增高并隐藏滚动条
Javascript 中介者模式实例
textbox 在光标位置插入字符功能的js实现(兼容ie,firefox)
jQuery Attributes(属性)的使用(二、类篇)
Javascript document.referrer判断访客来源网址
[原创]javascript 移动鼠标得到单元格所在table表中的rowIndex位置[兼容ie,firefox]
javascript获得光标所在的文本框(text/textarea)中的位置
event.srcElement 用法笔记e.target
javascript 导出数据到Excel(处理table中的元素)
javascript DOM操作之动态删除TABLE多行
Javascript在IE或Firefox下获取鼠标位置的代码
Javascript 多浏览器兼容性问题及解决方案
让div层随鼠标移动的实现代码 ie ff

Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 226 ::
收藏到网摘: n/a

在 YAHOO.util.Dom 中能发现很多有趣的东西。下面先说下 toCamel 的函数,感谢 小马 帮助我理解了这个函数。toCamel 把指定名称替换为驼峰写法,比如把 border-width 替换为 borderWidth 。 var patterns = {
HYPHEN: /(-[a-z])/i,
ROOT_TAG: /^body|html$/i
};
var toCamel = function(property) {
// 如果没有 -[a-z] 字母,则直接返回
if ( !patterns.HYPHEN.test(property) ) {
return property;
}
// 如果有缓存,直接返回替换后的值
if (propertyCache[property]) {
return propertyCache[property];
}
// 使用正则替换
var converted = property;
while( patterns.HYPHEN.exec(converted) ) {
converted = converted.replace(RegExp.$1,
RegExp.$1.substr(1).toUpperCase());
}
// 存入缓存
propertyCache[property] = converted;
return converted;
};在 YAHOO.util.Dom 中,getStyle 函数考虑了更多不同浏览器兼容性方面的问题,代码如下
// 使用 W3C DOM 标准的浏览器,比如 Firefox、Opera、Safari
if (document.defaultView && document.defaultView.getComputedStyle) {
getStyle = function(el, property) {
var value = null;
// 重命名部分 CSS 样式名
if (property == 'float') {
property = 'cssFloat';
}
// 获取通过 CSS 加上去的属性
var computed = document.defaultView.getComputedStyle(el, '');
if (computed) {
value = computed[toCamel(property)];
}
return el.style[property] || value;
};
// 如果是 IE 浏览器
} else if (document.documentElement.currentStyle && isIE) {
getStyle = function(el, property) {
switch( toCamel(property) ) {
// “转换”名称为 IE 可以认识的
case 'opacity' :
var val = 100;
try {
val =
el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
} catch(e) {
try {
val = el.filters('alpha').opacity;
} catch(e) {
}
}
// 百分比
return val / 100;
case 'float':
property = 'styleFloat';
default:
var value = el.currentStyle ? el.currentStyle[property] : null;
return ( el.style[property] || value );
}
};
} else {
// 获取内联样式
getStyle = function(el, property) { return el.style[property]; };
}另外,PPK 在他的 Blog 上的有关 getStyle 的阐述,也很精彩,有兴趣的可以去看下。