diff options
Diffstat (limited to 'components/script/dom/node.rs')
-rw-r--r-- | components/script/dom/node.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index f419798a110..ee173eee1f2 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -610,7 +610,7 @@ impl<'m, 'n> NodeHelpers<'m, 'n> for JSRef<'n, Node> { Ok(ref selectors) => { let root = self.ancestors().last().unwrap_or(self.clone()); for node in root.traverse_preorder() { - if node.is_element() && matches(selectors, &node) { + if node.is_element() && matches(selectors, &node, &mut None) { let elem: &JSRef<Element> = ElementCast::to_ref(&node).unwrap(); return Ok(Some(Temporary::from_rooted(elem))); } @@ -631,7 +631,9 @@ impl<'m, 'n> NodeHelpers<'m, 'n> for JSRef<'n, Node> { // Step 3. Ok(ref selectors) => { nodes = root.traverse_preorder().filter( - |node| node.is_element() && matches(selectors, node)).collect() + // TODO(cgaebel): Is it worth it to build a bloom filter here + // (instead of passing `None`)? Probably. + |node| node.is_element() && matches(selectors, node, &mut None)).collect() } } let window = window_from_node(self).root(); @@ -1988,6 +1990,10 @@ impl<'a> style::TNode<JSRef<'a, Element>> for JSRef<'a, Node> { (self as &NodeHelpers).parent_node().map(|node| *node.root()) } + fn tnode_first_child(&self) -> Option<JSRef<'a, Node>> { + (self as &NodeHelpers).first_child().map(|node| *node.root()) + } + fn prev_sibling(&self) -> Option<JSRef<'a, Node>> { (self as &NodeHelpers).prev_sibling().map(|node| *node.root()) } |