У меня есть компонент Vue, который имеет contenteditable
div
, который позволяет пользователям вводить сообщения. Когда пользователь впервые пытается создать сообщение, я использую jQuery, чтобы обернуть текст в тег <p>
. Я не могу понять, как этого достичь, используя только Vue. js ...
Vue. js компонент
<template>
<div id="Message" contenteditable="true" @focus="formatMessage" @keydown="formatMessage" @keyup="formatMessage" @keypress="formatMessage">
</div>
</template>
<script>
import $ from 'jquery'
formatMessage: function(event) {
if ($("#Message > p").length === 0) { // if no <p> element when user interacts with div
$("#Message").contents().eq(0).wrap("<p />"); // then wrap a <p> tag around the first child content
}
}
Можно ли сделать это, используя всего лишь Vue. js, поэтому мне не нужно загружать библиотеку jQuery для простых манипуляций с DOM (что может вызвать проблему) с Vue в виртуальном DOM c с изменениями jQuery)?
до formatMessage()
:
<div id="Message" contenteditable="true">
I started typing here
</div>
после formatMessage()
:
<div id="Message" contenteditable="true">
<p>I started typing here</p>
</div>
Можно / лучше попробовать сделать это с помощью виртуального DOM Vue? Могу ли я каким-то образом использовать createElement
для создания нового тега p
, а затем обновить его содержимое тем, что печатает пользователь? Может быть, это не так, как работает Virtual DOM, я не уверен.