<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    thinking

    one platform thousands thinking

    YAHOO.util.Dom之尋找節點(轉)

    YAHOO.util.Dom之尋找節點

    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的神奇,下次再說哈,真的很神奇。。。

    getElementBy ( method , tag , root ):這個就是通過method校驗的第一個元素。

    getElementsByClassName ( className , tag , root , apply , o , overrides ):是通過className進行元素尋找,其實這個方法是getElementsBy的一個特殊方法。

    getChildren ( node ):這個與Dom中的childNode類似。

    getChildrenBy ( node , method ):通過method方法過濾子元素,注意參數的順序以及node不可為id。

    getFirstChild ( node ):尋找第一個子元素,跟Dom中的firstChild有些類似。

    getFirstChildBy ( node , method ):尋找第一個通過method校驗的子元素,注意參數的順序以及node不可為id。其實這個等同于getChildrenBy得到的第一個元素。

    getLastChild ( node ):尋找最后一個子元素,與Dom中的lastChild有些類似。

    getLastChildBy ( node , method ):與getFirstChildBy相反,倒著尋找。

    getAncestorBy ( node , method ):尋找父節點,可以無限的往上級尋找,直到找到為止,node不能為id,跟Dom中的parentNode類似,不過這里不用反復的parentNode啦。

    getAncestorByClassName ( node , className ):通過className尋找父節點,是getAncestorBy的一個特殊方法。

    getAncestorByTagName ( node , tagName ):通過tagName尋找父節點,是getAncestorBy的一個特殊方法。

    getNextSibling ( node ):尋找緊挨的下一個同級非文本節點的節點,與Dom中的nextSibling類似,省去了判斷文本節點麻煩。

    getNextSiblingBy ( node , method ):無限的往下找直到找到通過method校驗的同級非文本節點,node不能為id,有了這個方法就不用無限的nextSibling啦。

    getPreviousSibling ( node ):尋找緊挨的上一個同級非文本節點的節點,與Dom中的previousSibling類似,可以省去判斷文本節點的麻煩。

    getPreviousSiblingBy ( node , method ):無限的往前找直到找到通過method校驗的同級非文本節點,node不能為id。

    posted on 2011-02-01 08:55 lau 閱讀(1453) 評論(1)  編輯  收藏 所屬分類: Web

    Feedback

    # re: YAHOO.util.Dom之尋找節點(轉) 2011-02-01 08:56 lau

    http://blog.csdn.net/ilibaba/archive/2009/06/07/4248932.aspx

    JavaScript(YUI)掃盲  回復  更多評論   

    主站蜘蛛池模板: 免费福利电影在线观看| 91成人免费观看| 亚洲∧v久久久无码精品| 最近免费视频中文字幕大全| 亚洲精品乱码久久久久久蜜桃图片| 久久亚洲高清综合| 亚洲成人免费网址| 免费国产va视频永久在线观看| 亚洲AV第一页国产精品| 日本大片在线看黄a∨免费| 中国黄色免费网站| 亚洲熟妇少妇任你躁在线观看| 亚洲码国产精品高潮在线| 搡女人免费视频大全| 99久久99这里只有免费的精品| 亚洲av永久综合在线观看尤物| 4338×亚洲全国最大色成网站| aⅴ在线免费观看| japanese色国产在线看免费| 亚洲人成www在线播放| 亚洲精品成人片在线观看精品字幕| 在线观看免费大黄网站| 日韩免费高清大片在线| 男人和女人高潮免费网站| 亚洲中文无码线在线观看| 亚洲熟妇丰满多毛XXXX| 国产精品免费看香蕉| 亚洲黄色免费网址| 最新亚洲成av人免费看| 黄色免费网址在线观看| 亚洲AV无码无限在线观看不卡| 亚洲av日韩av无码| 国产亚洲精品a在线观看| 日本19禁啪啪无遮挡免费动图| 蜜桃AV无码免费看永久| 日韩精品人妻系列无码专区免费| 又硬又粗又长又爽免费看 | 成年女人午夜毛片免费视频| 少妇无码一区二区三区免费| 男女一进一出抽搐免费视频| 国产亚洲精品美女久久久久|