diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-09-10 07:29:47 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-09-10 07:29:47 -0600 |
commit | 4c64c870c63bc41728ccd371e19fc4246427aa2c (patch) | |
tree | 5bac930a2d8e6d070e3b091038bbe897527aaf0c /components/script/dom/documentfragment.rs | |
parent | d64331b7d27189e6620d7df61e82cf59e776a2ff (diff) | |
parent | dc125f9eb16bd69cb7c816053b267d0bcaa81494 (diff) | |
download | servo-4c64c870c63bc41728ccd371e19fc4246427aa2c.tar.gz servo-4c64c870c63bc41728ccd371e19fc4246427aa2c.zip |
Auto merge of #7592 - nox:nonelementparentnode, r=jdm
Introduce NonElementParentNode
This is the interface where Document.getElementById() belong.
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7592)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/documentfragment.rs')
-rw-r--r-- | components/script/dom/documentfragment.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/components/script/dom/documentfragment.rs b/components/script/dom/documentfragment.rs index 2f0ccecda5c..3eac9df6bac 100644 --- a/components/script/dom/documentfragment.rs +++ b/components/script/dom/documentfragment.rs @@ -17,6 +17,7 @@ use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::htmlcollection::HTMLCollection; use dom::node::{Node, NodeTypeId, window_from_node}; use dom::nodelist::NodeList; +use string_cache::Atom; use util::str::DOMString; // https://dom.spec.whatwg.org/#documentfragment @@ -58,6 +59,18 @@ impl DocumentFragmentMethods for DocumentFragment { HTMLCollection::children(window.r(), NodeCast::from_ref(self)) } + // https://dom.spec.whatwg.org/#dom-nonelementparentnode-getelementbyid + fn GetElementById(&self, id: DOMString) -> Option<Root<Element>> { + let node = NodeCast::from_ref(self); + let id = Atom::from_slice(&id); + node.traverse_preorder().filter_map(ElementCast::to_root).find(|descendant| { + match descendant.get_attribute(&ns!(""), &atom!(id)) { + None => false, + Some(attr) => *attr.value().as_atom() == id, + } + }) + } + // https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild fn GetFirstElementChild(&self) -> Option<Root<Element>> { NodeCast::from_ref(self).child_elements().next() |