2015-05-22 2 views
4

Я не могу найти эквивалент js_of_ocaml document.getElementsByClassName. Каков канонический способ?Эквивалент документа.getElementsByClassName

EDIT: Я использую js_of_ocaml v2.5.

+1

Чтобы добавить 2 другие ответы, которые правильно, запрос тянуть на js_of_ocaml, чтобы добавить этот метод будет приветствоваться. :) – Drup

ответ

1

Это, кажется, не существует.

Ближайший я могу найти это с помощью атрибута DOM_html элементов (docs) и DOM_svg элементов (docs) className. Затем вы можете перебирать коллекцию и получать нужный элемент.

Это было взято с method index, которое я искал.

Класс документа DOM, однако, имеет имя тега getElementById и getElementBy, как показано here.

method getElementById : Js.js_string Js.t -> 'element Js.t Js.opt Js.meth

method getElementsByTagName : Js.js_string Js.t -> 'element nodeList Js.t Js.meth

1

Вы можете написать функцию, которая будет вызывать его непосредственно:

let getElementsByClassName (name : Js.js_string Js.t) 
    : Dom_html.element Dom.nodeList Js.t = 
    Js.Unsafe.meth_call 
    Dom_html.document "getElementsByClassName" [|Js.Unsafe.inject name|] 

подпись основана на подписи Dom.document##getElementsByTagName. Ограничения типа необходимы для безопасного использования типа.

Вы можете использовать его как это:

getElementsByClassName (Js.string "control") 

Вы можете изменить интерфейс таким образом он принимает строку OCaml, в стиле Dom_html.getElementById. Затем, возможно, вам также следует вернуть список OCaml.

1

я нуждался в этой функции тоже несколько недель назад, так что я сделал пиар https://github.com/ocsigen/js_of_ocaml/pull/312

+0

Хорошо спасибо, я думал, что там есть какой-то волшебный механизм. :) – Antoine