Index: recipes/web/html/traversing_from_current_position.html |
diff --git a/recipes/web/html/traversing_from_current_position.html b/recipes/web/html/traversing_from_current_position.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7f2990783af483031d40e47f92c55e1078802364 |
--- /dev/null |
+++ b/recipes/web/html/traversing_from_current_position.html |
@@ -0,0 +1,44 @@ |
+<!DOCTYPE html> |
+ |
+<html> |
+ <ol> |
+ <li>Head</li> |
+ <li>Shoulders</li> |
+ <li>Knees</li> |
+ <li>Toes</li> |
+ </ol> |
+ |
+ <body> |
+ <script type="application/dart"> |
+ import 'dart:html'; |
+ |
+ List<Element> nextSiblings(item) { |
+ Element nextElement = item.nextElementSibling; |
+ return item.parent.children.skipWhile((i) => i != nextElement).toList(); |
+ } |
+ |
+ List<Element> previousSiblings(item) { |
+ return item.parent.children.takeWhile((i) => i != item).toList(); |
+ } |
+ |
+ void main() { |
+ LIElement knees = query('ol > li:nth-child(3)'); |
+ |
+ // Parent. |
+ assert(knees.parent.tagName == 'OL'); |
+ assert(knees.parent.children.length == 4); |
+ |
+ // Immediate neighbors. |
+ assert(knees.nextElementSibling.text == 'Toes'); |
+ assert(knees.previousElementSibling.text == 'Shoulders'); |
+ |
+ // Siblings. |
+ List<Element> prev = previousSiblings(knees); |
+ assert(prev.first.text == 'Head'); |
+ assert(prev.last.text == 'Shoulders'); |
+ assert(nextSiblings(knees).first.text == 'Toes'); |
+ } |
+ </script> |
+ <script src="packages/browser/dart.js"></script> |
+ </body> |
+</html> |