建站极客
网络编程 JavaScript 正文
YUI 读码日记之 YAHOO.util.Dom - Part.1
所属分类:
网络编程 / JavaScript
阅读数:
908
收藏 0
赞 0
分享
先绕开头部很多的 if...else (其实就是定义 toCamel 与 getStyle 两个函数) - 由于浏览器的实现不统一,才造成如此麻烦的情况,回头可以聊聊这些代码。 下面我们在 YAHOO.util.Dom 类中看看有哪些宝藏。目前思想已经逐步的分裂,我看见个函数说个函数。 // 基本上可以认为是 document.getElementById 的翻版 get: function(el) { // 如果已经是 HTMLElement ,那么就直接返回 if (el && (el.nodeType || el.item)) { return el; } // 如果是字符串,那么就返回有这个 ID 的 Element if (YAHOO.lang.isString(el) || !el) { return document.getElementById(el); } // 看起来是个数组,循环调用自身,获取 Eelement if (el.length !== undefined) { var c = []; for (var i = 0, len = el.length; i < len; ++i) { c[c.length] = Y.Dom.get(el[i]); } return c; } return el; },这段代码写得非常的精妙。坦白的说,上述代码中的循环体,如果不加思索的话,恐怕就会写成 for (var i = 0, len = el.length; i < len; ++i) { c[c.length] = document.getElementById(el[i]); }虽然也能正常工作,但是前面的判断就失去了意义。 继续走马观花,现在看看 getElementsByClassName 的内部机制。有关 getElementsByClassName 的详细调用,可以参看 YUI 文档。 getElementsByClassName: function(className, tag, root, apply) { // 获取 tag 标签,默认为所有(“*”) tag = tag || '*'; // 指定跟节点名 root = (root) ? Y.Dom.get(root) : null || document; if (!root) { return []; } // 初始化节点信息 var nodes = [], elements = root.getElementsByTagName(tag), re = getClassRegEx(className); // 滤掉不符合规则的节点 for (var i = 0, len = elements.length; i < len; ++i) { if ( re.test(elements[i].className) ) { // 你一定很奇怪为什么用 nodes.length 而不是用 i // 仔细考虑下 :^) nodes[nodes.length] = elements[i]; // 执行回调函数 if (apply) { apply.call(elements[i], elements[i]); } } } return nodes; },教科书式的 DOM 节点获取和过滤,初始化数据以及操作数据都显得非常的严谨而且正规,YUI 的代码让我有几分的“安全感”。类似的,再来一个 getElementsBy 函数,相应代码如下 getElementsBy: function(method, tag, root, apply) { // 与上述函数相同,略 tag = tag || '*'; root = (root) ? Y.Dom.get(root) : null || document; if (!root) { return []; } var nodes = [], elements = root.getElementsByTagName(tag); for (var i = 0, len = elements.length; i < len; ++i) { // 根据自定义函数返回值判断节点的属性 if ( method(elements[i]) ) { nodes[nodes.length] = elements[i]; if (apply) { apply(elements[i]); } } } return nodes; },OK,今天就先到这里。
纯javascript判断查询日期是否为有效日期 很多网站都涉及到输入日期选项,如果客户日期输入错误,可能导入查询不到甚至查询到错误的信息,为了更好的满足用户需求,需要对日期进行校验,下面给大家介绍使用纯javascript如何判断查询日期是否为有效日期,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
jquery实现的蓝色二级导航条效果代码 这篇文章主要介绍了jquery实现的蓝色二级导航条效果代码,涉及jquery鼠标事件及页面样式的动态切换效果实现技巧,非常简单实用,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
ajax如何实现页面局部跳转与结果返回 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新,本篇文章给大家介绍ajax如何实现页面局部跳转与结果返
评论 0
收藏 0
赞 0
分享
js实现的黑背景灰色二级导航菜单效果代码 这篇文章主要介绍了js实现的黑背景灰色二级导航菜单效果代码,涉及javascript操作页面元素动态切换的实现技巧,非常具有实用价值,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
javascript中SetInterval与setTimeout的定时器用法 Javascript的setTimeOut和setInterval函数应用非常广泛,它们都用来处理延时和定时任务,比如打开网页一段时间后弹出一个登录框,页面每隔一段时间发送异步请求获取最新数据等,本文文章通过代码示例给大家介绍javascript中SetInterval与setT
评论 0
收藏 0
赞 0
分享
jQuery实现的背景动态变化导航菜单效果 这篇文章主要介绍了jQuery实现的背景动态变化导航菜单效果,涉及jquery页面元素背景动态变换的实现技巧,非常具有实用价值,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
查看更多