| // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| part of $LIBRARYNAME; |
| |
| /** |
| * The base class for all documents. |
| * |
| * Each web page loaded in the browser has its own [Document] object, which is |
| * typically an [HtmlDocument]. |
| * |
| * If you aren't comfortable with DOM concepts, see the Dart tutorial |
| * [Target 2: Connect Dart & HTML](http://www.dartlang.org/docs/tutorials/connect-dart-html/). |
| */ |
| $(ANNOTATIONS)class $CLASSNAME extends Node $NATIVESPEC |
| { |
| |
| $!MEMBERS |
| |
| /** |
| * Finds the first descendant element of this document that matches the |
| * specified group of selectors. |
| * |
| * Unless your webpage contains multiple documents, the top-level query |
| * method behaves the same as this method, so you should use it instead to |
| * save typing a few characters. |
| * |
| * [selectors] should be a string using CSS selector syntax. |
| * var element1 = document.query('.className'); |
| * var element2 = document.query('#id'); |
| * |
| * For details about CSS selector syntax, see the |
| * [CSS selector specification](http://www.w3.org/TR/css3-selectors/). |
| */ |
| Element query(String selectors) { |
| // It is fine for our RegExp to detect element id query selectors to have |
| // false negatives but not false positives. |
| if (new RegExp("^#[_a-zA-Z]\\w*\$").hasMatch(selectors)) { |
| return $dom_getElementById(selectors.substring(1)); |
| } |
| return $dom_querySelector(selectors); |
| } |
| |
| /** |
| * Finds all descendant elements of this document that match the specified |
| * group of selectors. |
| * |
| * Unless your webpage contains multiple documents, the top-level queryAll |
| * method behaves the same as this method, so you should use it instead to |
| * save typing a few characters. |
| * |
| * [selectors] should be a string using CSS selector syntax. |
| * var items = document.queryAll('.itemClassName'); |
| * |
| * For details about CSS selector syntax, see the |
| * [CSS selector specification](http://www.w3.org/TR/css3-selectors/). |
| */ |
| List<Element> queryAll(String selectors) { |
| if (new RegExp("""^\\[name=["'][^'"]+['"]\\]\$""").hasMatch(selectors)) { |
| final mutableMatches = $dom_getElementsByName( |
| selectors.substring(7,selectors.length - 2)); |
| int len = mutableMatches.length; |
| final copyOfMatches = new List<Element>.fixedLength(len); |
| for (int i = 0; i < len; ++i) { |
| copyOfMatches[i] = mutableMatches[i]; |
| } |
| return new _FrozenElementList._wrap(copyOfMatches); |
| } else if (new RegExp("^[*a-zA-Z0-9]+\$").hasMatch(selectors)) { |
| final mutableMatches = $dom_getElementsByTagName(selectors); |
| int len = mutableMatches.length; |
| final copyOfMatches = new List<Element>.fixedLength(len); |
| for (int i = 0; i < len; ++i) { |
| copyOfMatches[i] = mutableMatches[i]; |
| } |
| return new _FrozenElementList._wrap(copyOfMatches); |
| } else { |
| return new _FrozenElementList._wrap($dom_querySelectorAll(selectors)); |
| } |
| } |
| } |