diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2015-09-13 02:47:34 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2015-09-13 23:40:24 +0200 |
commit | cba885630903cc58fe31b8651ea4e5a37c4bcf8d (patch) | |
tree | 1b5d49dba9cd3d5a8478c7dfbc6c55e17fe180f4 /components/script/dom/node.rs | |
parent | 650afc9d3e0d351df493e11831b1c072f79e8889 (diff) | |
download | servo-cba885630903cc58fe31b8651ea4e5a37c4bcf8d.tar.gz servo-cba885630903cc58fe31b8651ea4e5a37c4bcf8d.zip |
Fix Node::query_selector() and Node::query_selector_iter()
These should not find the root of the tree to start matching.
Diffstat (limited to 'components/script/dom/node.rs')
-rw-r--r-- | components/script/dom/node.rs | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index c9e78200c99..419909fa11e 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -812,18 +812,17 @@ impl Node { Err(()) => Err(Syntax), // Step 3. Ok(ref selectors) => { - let root = self.ancestors().last(); - let root = root.r().unwrap_or(self.clone()); - Ok(root.traverse_preorder().filter_map(ElementCast::to_root).find(|element| { + Ok(self.traverse_preorder().filter_map(ElementCast::to_root).find(|element| { matches(selectors, element, None) })) } } } + /// https://dom.spec.whatwg.org/#scope-match-a-selectors-string /// Get an iterator over all nodes which match a set of selectors - /// Be careful not to do anything which may manipulate the DOM tree whilst iterating, otherwise - /// the iterator may be invalidated + /// Be careful not to do anything which may manipulate the DOM tree + /// whilst iterating, otherwise the iterator may be invalidated. #[allow(unsafe_code)] pub unsafe fn query_selector_iter(&self, selectors: DOMString) -> Fallible<QuerySelectorIterator> { @@ -833,9 +832,7 @@ impl Node { Err(()) => Err(Syntax), // Step 3. Ok(selectors) => { - let root = self.ancestors().last(); - let root = root.r().unwrap_or(self); - Ok(QuerySelectorIterator::new(root.traverse_preorder(), selectors)) + Ok(QuerySelectorIterator::new(self.traverse_preorder(), selectors)) } } } |