我正在尝试创建一个WYSIWYG编辑器。现在,我们可以将文本对齐到左、中、右。我想添加如果用户高亮一些文本,并点击粗体或斜体按钮。我想大胆一点。
我得到的突出显示的文本如下
const getHighlightedText = () => {
let text = '';
if (window.getSelection) {
text = window.getSelection().toString();
} else if (
document.selection &&
document.selection.type != 'Control'
) {
text = document.selection.createRange().text;
}
return text;
};现在,我如何在强标记或em标记中添加文本。我想用字符串替换。但是,如果我们有相同的文本多次,这是不正确的。
我该怎么做?
$(document).ready(() => {
const getHighlightedText = () => {
let text = '';
if (window.getSelection) {
text = window.getSelection().toString();
} else if (
document.selection &&
document.selection.type != 'Control'
) {
text = document.selection.createRange().text;
}
return text;
};
let activeElement = null;
$('#builder-content').on('click', (e) => {
activeElement = $(e.target);
console.log(activeElement);
});
$('#builder-align-text-left').on('click', (e) => {
if (activeElement.hasClass('text-end')) {
$(activeElement).removeClass('text-end');
}
if (activeElement.hasClass('text-center')) {
$(activeElement).removeClass('text-center');
}
activeElement.addClass('text-start');
});
$('#builder-align-text-left').on('click', (e) => {
if (activeElement.hasClass('text-end')) {
$(activeElement).removeClass('text-end');
}
if (activeElement.hasClass('text-center')) {
$(activeElement).removeClass('text-center');
}
activeElement.addClass('text-start');
});
$('#builder-align-text-center').on('click', (e) => {
if (activeElement.hasClass('text-end')) {
$(activeElement).removeClass('text-end');
}
if (activeElement.hasClass('text-start')) {
$(activeElement).removeClass('text-start');
}
activeElement.addClass('text-center');
});
$('#builder-align-text-right').on('click', (e) => {
if (activeElement.hasClass('text-center')) {
$(activeElement).removeClass('text-center');
}
if (activeElement.hasClass('text-start')) {
$(activeElement).removeClass('text-start');
}
$(activeElement).addClass('text-end');
});
});<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous" />
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.0/css/all.css" integrity="sha384-OLYO0LymqQ+uHXELyx93kblK5YIS3B2ZfLGBmsJaUyor7CpMTBsahDHByqSuWW+q" crossorigin="anonymous" />
<div class="container h-100">
<div class="row h-100">
<div class="d-flex justify-content-center align-items-center h-100">
<div class="card">
<div class="card-body p-4">
<div id="builder-editor">
<div id="builder-content" contenteditable="true">
<h3>Heading 3</h3>
<p>
In JavaScript, when an object is passed to a function expecting a string (like window.alert() or document.write()), the object's toString() method is called and the returned value is passed to the function. This can make the object appear to be a string
when used with other functions when it is really an object with properties and methods.
</p>
</div>
</div>
</div>
<div class="card-footer">
<div class="d-flex builder-toolbar">
<button class="btn btn-light shadow-none me-3">
<i class="fas fa-bold"></i>
</button>
<button class="btn btn-light shadow-none me-3">
<i class="fas fa-italic"></i>
</button>
<button id="builder-align-text-left" class="btn btn-light shadow-none me-3">
<i class="fas fa-align-left"></i>
</button>
<button id="builder-align-text-center" class="btn btn-light shadow-none me-3">
<i class="fas fa-align-center"></i>
</button>
<button id="builder-align-text-right" class="btn btn-light shadow-none me-3">
<i class="fas fa-align-right"></i>
</button>
<button id="builder-align-text-right" class="btn btn-light shadow-none me-3">
<i class="fas fa-cloud-upload-alt"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
发布于 2021-01-29 15:02:09
您可以尝试在单击事件的粗体按钮上添加强标记,如下所示:
<button class="btn btn-light shadow-none me-3" id="builder-text-bold">
<i class="fas fa-bold"></i>
</button>
$('#builder-text-bold').on('click', (e) => {
var range;
if (window.getSelection) {
range = window.getSelection().getRangeAt(0);
} else if (document.getSelection) {
range = document.getSelection().getRangeAt(0);
} else if (document.selection) {
range = document.selection.createRange();
}
if (range != null && range != '' ) {
var newNode = $('<strong> </strong>')[0];
range.surroundContents(newNode);
}
});https://stackoverflow.com/questions/65954097
复制相似问题