API: dom selector-mapping.js (YUI Library)

# Yahoo! UI Library

### dom 2.9.0

Yahoo! UI Library > dom > selector-mapping.js (source view)
Search:
Filters Show Private Show Protected Show Deprecated

    var Y = YAHOO,
        Y_DOM = YAHOO.util.Dom,
        EMPTY_ARRAY = [],
        Y_UA = Y.env.ua,
        Y_Lang = Y.lang,
        Y_DOC = document,
        Y_DOCUMENT_ELEMENT = Y_DOC.documentElement,

        Y_DOM_inDoc = Y_DOM.inDocument,
        Y_mix = Y_Lang.augmentObject,
        Y_guid = Y_DOM.generateId,

        Y_getDoc = function(element) {
            var doc = Y_DOC;
            if (element) {
                doc = (element.nodeType === 9) ? element : // element === document
                    element.ownerDocument || // element === DOM node
                    element.document || // element === window
                    Y_DOC; // default
            }

            return doc;
        },

        Y_Array = function(o, startIdx) {
            var l, a, start = startIdx || 0;

            // IE errors when trying to slice HTMLElement collections
            try {
                return Array.prototype.slice.call(o, start);
            } catch (e) {
                a = [];
                l = o.length;
                for (; start < l; start++) {
                    a.push(o[start]);
                }
                return a;
            }
        },

        Y_DOM_allById = function(id, root) {
            root = root || Y_DOC;
            var nodes = [],
                ret = [],
                i,
                node;

            if (root.querySelectorAll) {
                ret = root.querySelectorAll('[id="' + id + '"]');
            } else if (root.all) {
                nodes = root.all(id);

                if (nodes) {
                    // root.all may return HTMLElement or HTMLCollection.
                    // some elements are also HTMLCollection (FORM, SELECT).
                    if (nodes.nodeName) {
                        if (nodes.id === id) { // avoid false positive on name
                            ret.push(nodes);
                            nodes = EMPTY_ARRAY; // done, no need to filter
                        } else { //  prep for filtering
                            nodes = [nodes];
                        }
                    }

                    if (nodes.length) {
                        // filter out matches on node.name
                        // and element.id as reference to element with id === 'id'
                        for (i = 0; node = nodes[i++];) {
                            if (node.id === id  ||
                                    (node.attributes && node.attributes.id &&
                                    node.attributes.id.value === id)) {
                                ret.push(node);
                            }
                        }
                    }
                }
            } else {
                ret = [Y_getDoc(root).getElementById(id)];
            }

            return ret;
        };

Copyright © 2011 Yahoo! Inc. All rights reserved.