如何通过模式编辑元素的 innerHTML?
How can I edit an element's innerHTML through a modal?
我有一个模式,当单击 div 元素时出现。如何将 div 元素的文本传递给模式进行编辑,然后在单击保存按钮时用新文本更新 div ?我正在使用 Bootstrap/JQuery v3.4.1 JavaScript 和 CSS.
这是我的 div 元素:
<div id='item' class='board-list' data-toggle='modal' data-target='#DetailsModal'>
<p>Editable Text</p>
</div>
和我的模态:
<div id="DetailsModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">× </button>
<h4 class="modal-title" id="myModalLabel">Modal title</h4>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
要将一个元素的文本传递给另一个元素或使用 JavaScript 更新一个元素的文本,请使用 HTMLElement.innerText
方法:
const $input = document.getElementById('input')
const $btn = document.getElementById('btn')
const $output = document.getElementById('output')
var currentText = $output.innerText
$input.value = currentText
$btn.addEventListener('click', () => {
currentText = $output.innerText
var newText = $input.value
$output.innerText = newText
})
<input id="input" type="text">
<button id="btn">Update output text</button>
<br /><br />
<div id="output">
Lorem ipsum dolor sit amet.
</div>
您需要先向您的模式添加文本输入或文本区域。例如:
<div class="modal-body">
<textarea class="modal-text-editor"></textarea>
</div>
根据您提供的代码,您似乎正在使用 Bootstrap。假设您已经包含 JQuery 和 Bootstrap JS,您可以使用它们的 Modal Javascript Events.
var editing_text_element;
// get text into editor on modal show
$('#DetailsModal').on('show.bs.modal', function(e) {
editing_text_element = $(e.relatedTarget).find('p');
$(this).find('modal-text-editor').val(editing_text_element.text());
});
// save text to <p> tag after saving
$('#DetailsModal').find('btn-primary').on('click', function(e) {
var edited_text = $('#DetailsModal').find('modal-text-editor').val();
editing_text_element.text(edited_text);
});
// clear modal upon close
$('#DetailsModal').on('hidden.bs.modal', function(e) {
$(this).find('modal-text-editor').val('');
});
我有一个模式,当单击 div 元素时出现。如何将 div 元素的文本传递给模式进行编辑,然后在单击保存按钮时用新文本更新 div ?我正在使用 Bootstrap/JQuery v3.4.1 JavaScript 和 CSS.
这是我的 div 元素:
<div id='item' class='board-list' data-toggle='modal' data-target='#DetailsModal'>
<p>Editable Text</p>
</div>
和我的模态:
<div id="DetailsModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">× </button>
<h4 class="modal-title" id="myModalLabel">Modal title</h4>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
要将一个元素的文本传递给另一个元素或使用 JavaScript 更新一个元素的文本,请使用 HTMLElement.innerText
方法:
const $input = document.getElementById('input')
const $btn = document.getElementById('btn')
const $output = document.getElementById('output')
var currentText = $output.innerText
$input.value = currentText
$btn.addEventListener('click', () => {
currentText = $output.innerText
var newText = $input.value
$output.innerText = newText
})
<input id="input" type="text">
<button id="btn">Update output text</button>
<br /><br />
<div id="output">
Lorem ipsum dolor sit amet.
</div>
您需要先向您的模式添加文本输入或文本区域。例如:
<div class="modal-body">
<textarea class="modal-text-editor"></textarea>
</div>
根据您提供的代码,您似乎正在使用 Bootstrap。假设您已经包含 JQuery 和 Bootstrap JS,您可以使用它们的 Modal Javascript Events.
var editing_text_element;
// get text into editor on modal show
$('#DetailsModal').on('show.bs.modal', function(e) {
editing_text_element = $(e.relatedTarget).find('p');
$(this).find('modal-text-editor').val(editing_text_element.text());
});
// save text to <p> tag after saving
$('#DetailsModal').find('btn-primary').on('click', function(e) {
var edited_text = $('#DetailsModal').find('modal-text-editor').val();
editing_text_element.text(edited_text);
});
// clear modal upon close
$('#DetailsModal').on('hidden.bs.modal', function(e) {
$(this).find('modal-text-editor').val('');
});