diff --git a/src/components/script/dom/htmldatalistelement.rs b/src/components/script/dom/htmldatalistelement.rs
index 2a81cce1994..aab9aff5b94 100644
--- a/src/components/script/dom/htmldatalistelement.rs
+++ b/src/components/script/dom/htmldatalistelement.rs
@@ -6,11 +6,11 @@ use dom::bindings::codegen::HTMLDataListElementBinding;
use dom::bindings::codegen::InheritTypes::{HTMLDataListElementDerived, NodeCast};
use dom::bindings::js::JS;
use dom::document::Document;
-use dom::element::HTMLDataListElementTypeId;
+use dom::element::{Element, HTMLDataListElementTypeId};
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
-use dom::htmlcollection::HTMLCollection;
+use dom::htmlcollection::{HTMLCollection, CollectionFilter};
use dom::htmlelement::HTMLElement;
-use dom::node::{Node, ElementNodeTypeId};
+use dom::node::{Node, ElementNodeTypeId, window_from_node};
use servo_util::str::DOMString;
#[deriving(Encodable)]
@@ -42,9 +42,14 @@ impl HTMLDataListElement {
impl HTMLDataListElement {
pub fn Options(&self, abstract_self: &JS) -> JS {
+ struct HTMLDataListOptionsFilter;
+ impl CollectionFilter for HTMLDataListOptionsFilter {
+ fn filter(&self, elem: &JS, _root: &JS) -> bool {
+ elem.get().tag_name == ~"option"
+ }
+ }
let node: JS = NodeCast::from(abstract_self);
- let doc = &self.htmlelement.element.node.owner_doc();
- let window = &doc.get().window;
- HTMLCollection::by_tag_name(window, &node, ~"option")
+ let filter = ~HTMLDataListOptionsFilter;
+ HTMLCollection::create_live(&window_from_node(&node), &node, filter)
}
}