2010,正心,修身,养性。
焚我残躯,毁我意志,复我记忆。
子曰:“知之者不如好之者,好之者不如乐之者。”
子曰:“吾尝终日不食,终夜不寝,以思,无益,不如学也。”

快乐的生活,快乐的分享。

文章关键字 ‘Dom’

document.formname.inputname

2009年08月6日 | 分类:JavaScript | 1 Comment » | 1,434 views

这个问题我之前已经遇到过一次了,但是这次又忘记了,依然又犯错了,所以我必须要记录一下。

看一下这个例子:

<form name="hehe">
    <input type="checkbox" name="haha" />
</form>
<form name="hehe2">
    <input type="checkbox" name="haha" />
    <input type="checkbox" name="haha" />
</form>
<script type="text/javascript">
document.write(document.hehe.haha.length);
document.write('<br />');
document.write(document.hehe2.haha.length);
</script>

Demo地址:http://www.12sui.cn/test/dom0-0908.html

继续阅读 »

YAHOO.util.Dom.getElementsByClassName的一点小改进~

2009年04月14日 | 分类:YUI | 7 Comments » | 1,795 views

由于昨天遇到的一个问题,才有了这种想法。目前的YAHOO.util.Dom.getElementsByClassName仅支持一个class的寻找,如果我想寻找多个class的话就要多操作几次了,而且如果要给这些节点添加相同的事件的话,又要首先把它们放到一个数组,然后给新的数组添加事件,或者分别给各个数组添加事件,挺麻烦的,所以给YAHOO.util.Dom.getElementsByClassName做一点小改进,让它可以找到包含任何一个所给class的所有节点。

getElementsByClassName: function(className, tag, root, apply, o, overrides) {
    className = lang.trim(className);
    tag = tag || '*';
    root = (root) ? Y.Dom.get(root) : null || document;
    if (!root) {
        return [];
    }
    var nodes = [],
        elements = root.getElementsByTagName(tag),
        hasClass = Y.Dom.hasClass;
    if(className.indexOf('|')>0) {
        var classnames = className.split('|');
        //找到所有节点
        for (var i = 0, len = elements.length; i < len; ++i) {
            for (var j = 0; j < classnames.length; ++j) {
                if ( hasClass(elements[i], lang.trim(classnames[j])) ) {
                    nodes[nodes.length] = elements[i];
                }
            }
        }
        //剔除相同的节点
        for (var k = 0; k < nodes.length; k++) {
            for(var l = k+1; l < nodes.length; l++) {
                if(nodes[k] == nodes[l]) {
                    nodes.splice(l,1);
                }
            }
        }
    } else {
        for (var i = 0, len = elements.length; i < len; ++i) {
            if ( hasClass(elements[i], className) ) {
                nodes[nodes.length] = elements[i];
            }
        }

    }
    if (apply) {
        Y.Dom.batch(nodes, apply, o, overrides);
    }
    return nodes;
}

用法很简单,就是在class之间加上“|”,比如:YAHOO.util.Dom.getElementsByClassName('hehe|haha|heihei')。

继续阅读 »

今晚谈一下Dom结构的修改和坐标的获取等,一共是17个方法。其中Dom结构的操作只有两个,另外15个都是有关宽度、高度、坐标的获取。

insertBefore ( newNode , referenceNode ):这个和Dom方法中的insertBefore一样,就是将一个节点插入到另一个节点的前边。

insertAfter ( newNode , referenceNode ):Dom方法中没有insertAfter 方法,YUI根据insertBefore构建了这个方法,就是将一个节点插入到另一个节点的后边。

getDocumentHeight ( ):获取页面的高度。

getDocumentWidth ( ):获取页面的宽度。

getViewportHeight ( ):获取页面的可视高度。

getViewportWidth ( ):获取页面的可视宽度。

getDocumentScrollLeft ( document ):获取滚的左宽度。。这个我也不知道咋描述。。。

getDocumentScrollTop ( document ):获取滚的上宽度。。。

getClientRegion ( ):获取浏览器的可视区域,返回top、right、bottom、left、height、width。

getRegion ( el ):获取元素的坐标以及宽高信息,返回top、right、bottom、left、height、width,这个可能用的情况还是比较多吧哈。

getXY ( el ):获取元素的坐标,返回left和top。

getX ( el ):获取元素的横向坐标,也就是离左侧的距离。

getY ( el ):获取元素的纵向总表,也就是离上部的距离。

setXY ( el , pos , noRetry ):设置节点的横向和纵向坐标。

setX ( el , x ):设置节点的横向坐标。

setY ( el , x ):设置纵向坐标。

继续阅读 »

YAHOO.util.Dom之布尔值

2009年03月24日 | 分类:YUI | 2 Comments » | 1,792 views

名字倒不知道怎么写了,就记成布尔值吧,主要介绍YUI的Dom方法里返回Boolean值的几个方法,一共三个,比较简单:

hasClass ( el , className ):这个方法就是判断el是否拥有某一个class。

inDocument ( el , doc ):就是判断el是否在Dom结构中存在,一般我们使用removeChild方法会将元素移出到超空间,虽然是存在的,但是它不存在Dom结构中,普通的Dom方法中我是通过判断document.documentElement是否包含那个元素,YUI的方法其实一样的。

isAncestor ( haystack , needle ):判断是否是父节点,这个方法可以用来解决很困扰我们的onmouseover和onmouseout问题,要善用哈~

好久没有好好睡了,实在不行了,早点睡了哈,大家晚安~

继续阅读 »

YAHOO.util.Dom之样式操作

2009年03月23日 | 分类:YUI | No Comments » | 1,849 views

其实网页上很多炫的交互动作都是通过JavaScript操作样式表来实现的,这里谈一下我学习YUI的这部分经验。YUI中操作样式表以及元素属性的方法一共有7个,很少,也比较好理解。

getStyle ( el , property ):这个方法是获取元素的某个特定属性,el可以是String、HTMLElement、Array,注意property是不能为Array的,样式有内嵌的和外链的,读取内嵌的(特指style定义的)还好,如果是链入的,因为IE和Dom获取style的方式不同(IE是currentStyle,而Dom的方法是window.getComputedStyle),所以经常我们使用的时候要判断,而YUI的这个方法已经涵盖了两种情况,可以随意的使用。另外提到的一点是,float是JavaScript的保留字,所以在读取样式的时候要cssFloat(Dom)或者styleFloat(IE)来代替,我也是在读YUI代码的时候发现这一点。貌似直接读取样式的操作并不常用,至少我是。。。

setStyle ( el , property , val ):这个方法应该是比较常用滴,因为我们操作样式表的目的就是为了改变元素的样式,需要注意的东西跟上一个一样,这里就不多说啦。

addClass ( el , className ):这个方法的作用是给元素添加一个className,正常我们操作的时候,要么直接设置el.className=”,要么el.className += ”,其实YUI代码里使用的方法并没什么高级的:Y.Dom.setAttribute(el, CLASS_NAME, trim(current + SPACE + className)),这个函数其实并没有比我们正常使用的方法高级多少,但是值得注意的是这里的el可以是Array的~

继续阅读 »

YAHOO.util.Dom之寻找节点

2009年03月22日 | 分类:YUI | No Comments » | 1,620 views

YUI的Dom方法一共有45个,在这里谈一下我学习过程遇到的问题和经验,先介绍17个寻找节点类型的Dom方法。

get(el):记得初学JavaScript的时候,最先认识的两个方法就是getElementById和getElementsByTagName,这两个东东也基本上能够找到大多数你需要找的东西啦。YUI里的get方法跟getElementById类似,但是它的能力却要强很多了,el可以是String、HTMLElement或者Array。

getElementsBy ( method , tag , root , apply , o , overrides ):这个会和getElementsByTagName比较像一点点吧,但是功能差好远,基本上getElementsBy应该可以找到一切你想找的元素,method是定义一个校验目标元素的方法,返回一个boolean值,tag是目标元素的nodeName,root是指在哪个元素中进行寻找,也可以说成是一个范围吧。apply,我必须要说下它。。当初它困扰我了半天,YUI给出的解释是“A function to apply to each element when found ”,可以理解为一个回调函数吧,再看看YUI的代码,其中有这么一段:

if (apply) {
     Y.Dom.batch(nodes, apply, o, overrides);
}

我当时的理解是,因为最终返回的是一个节点的数组嘛,我就以为执行完前边的校验后得到的结果再在apply中进行一次,也就是我在apply中再对结果元素进行下一步的节点寻找,那么最后返回的应该是apply执行后得到的所有节点集合。。。可是无论我怎么试,最终返回的都是通过method方法所得到数组,并没有再次通过apply获得更多的元素,嘿嘿,不要见笑哈,当时就是这么想的。。。后来发现,实际上不是这样子,我理解错误的原因只要就在那个batch上,当时的错误在于,我把batch放进getElementsBy里了,那么在batch里边return后应该不会再继续执行return nodes了,但是实际上这里的Y.Dom.batch(nodes, apply, o, overrides)只是一个最终的结果而已,所以return nodes还是会执行的。那么这个apply的作用在何处呢?其实作用就是执行一次回调嘛哈,它是可以实现我之前的想法的,但是不是直接返回的,举个例子:

var uls = YAHOO.util.Dom.getElementsBy(function(el){
    return el.className === 'J_tab';
},'ul','content');

这是寻找id为content的容器下className为J_tab的节点,那么如果我同时还需要获取每个ul下的所有li节点该怎么做呢,总不能再来一次循环吧,当然也可以啦,不过要好好利用下YUI吧,那就是让它获取ul的同时获取li:

var lis = [];
function getli(obj) {
    lis.push(obj.getElementsByTagName('li'));
}
var uls = YAHOO.util.Dom.getElementsBy(function(el){
    return el.className === 'J_tab';
},'ul','content',getli);

OK,这样子就一举两得了哈~后边的作用域和上下文就不多说啦,关于batch的神奇,下次再说哈,真的很神奇。。。

继续阅读 »

  • Gorgeous Rulerv3.0

文章分类

最新文章

Rss
渴望孩子的纯真、诚实、可爱、无忧无虑。。。。。。

这位姐姐,你好,你的浏览器版本太低了,为了避免您中毒,请您升级您的浏览器!