//@tag dom,core //@require ../EventObject.js /** * @class Ext.dom.AbstractQuery * @private */ Ext.define('Ext.dom.AbstractQuery', { /** * Selects a group of elements. * @param {String} selector The selector/xpath query (can be a comma separated list of selectors) * @param {HTMLElement/String} [root] The start of the query (defaults to document). * @return {HTMLElement[]} An Array of DOM elements which match the selector. If there are * no matches, and empty Array is returned. */ select: function(q, root) { var results = [], nodes, i, j, qlen, nlen; root = root || document; if (typeof root == 'string') { root = document.getElementById(root); } q = q.split(","); for (i = 0,qlen = q.length; i < qlen; i++) { if (typeof q[i] == 'string') { //support for node attribute selection if (typeof q[i][0] == '@') { nodes = root.getAttributeNode(q[i].substring(1)); results.push(nodes); } else { nodes = root.querySelectorAll(q[i]); for (j = 0,nlen = nodes.length; j < nlen; j++) { results.push(nodes[j]); } } } } return results; }, /** * Selects a single element. * @param {String} selector The selector/xpath query * @param {HTMLElement/String} [root] The start of the query (defaults to document). * @return {HTMLElement} The DOM element which matched the selector. */ selectNode: function(q, root) { return this.select(q, root)[0]; }, /** * Returns true if the passed element(s) match the passed simple selector (e.g. div.some-class or span:first-child) * @param {String/HTMLElement/Array} el An element id, element or array of elements * @param {String} selector The simple selector to test * @return {Boolean} */ is: function(el, q) { if (typeof el == "string") { el = document.getElementById(el); } return this.select(q).indexOf(el) !== -1; } });