de9fbf0e90
This should be invisible to end users, but basically brings dart:html in-line with the core libraries. BUG= Review URL: https://codereview.chromium.org//12061008 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@17929 260f80e4-7a28-3924-810f-c04153c831b5
82 lines
3.1 KiB
Plaintext
82 lines
3.1 KiB
Plaintext
// 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));
|
|
}
|
|
}
|
|
}
|