Objetivo Cuando el usuario escribe algo como @ , quiero obtener todo el texto que viene después de @ para crear la funcionalidad de mención desde cero sin un paquete. Además, quiero hacerlo de forma original en lugar de cortar el texto. Por ejemplo, puede haber algo como curr.get_text_content_at_range(0,10)
Problema Cuando probé el siguiente método, la línea console.log(text[i:f]); no devuelve el texto correcto después del signo @. así que me gusta i+2 y f+2 como este console.log(text[i+2:f+2]);
<p class="my_element" contenteditable="true"></p> fn selection() -> Option<usize> { let sel = window().unwrap_throw().get_selection().unwrap().unwrap().get_range_at(0).unwrap().end_offset().unwrap(); Some((sel + 2) as usize) } pub(crate) fn mention_handler(&mut self) { let mut curr: Option<Element> = None; let mut i: Option<usize> = None; let closure = Closure::wrap(Box::new(move |event: web_sys::KeyboardEvent| { let range = window().unwrap_throw().get_selection().unwrap().unwrap().get_range_at(0).unwrap(); curr = Some(range.common_ancestor_container().unwrap().parent_element().unwrap()); if event.key() == "@" { i = Mention::selection(); } if i != None{ let text = &curr.clone().unwrap().text_content().unwrap(); log_1(&format!("{:#?},{:#?}", i, Mention::selection()).into()); log_1(&format!("{:#?}", &text[i.unwrap()..Mention::selection().unwrap()]).into()); } }) as Box<dyn FnMut(_)>); self.editor.add_event_listener_with_callback("keyup", closure.as_ref().unchecked_ref()); closure.forget(); }