我这里有一段代码。我想将文本中选定的单词更改为粗体、意大利语或带下划线的文本:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<div>
<p>Try to select this text.</p>
</div>
<input id="changeColor" type="button" value="Bold" />
<button id="changeItallics">Italics</button>
<button id="changeUnderline">Underline</button>
<script>
function selectHTML() {
try {
if (window.ActiveXObject) {
var c = document.selection.createRange();
return c.htmlText;
}
var nat = document.createElement("span");
var w = getSelection().getRangeAt(0);
w.surroundContents(nat);
return nat.innerHTML;
} catch (e) {
if (window.ActiveXObject) {
return document.selection.createRange();
} else {
return getSelection();
}
}
}
$(function() {
$('#changeColor').click( function() {
var mytext = selectHTML();
$('span').css({"font-weight":"bold"});
});
$('#changeItallics').click( function() {
var mytext1 = selectHTML();
$('span').css({"font-style": "italic"});
});
$('#changeUnderline').click( function() {
var mytext2 = selectHTML();
$('span').css({"text-decoration": "underline"});
});
});
</script>
但是,每当我单击粗体、斜体或下划线按钮时,先前选择的字母也会被转换。我怎样才能纠正它?我忘了什么吗?
3条答案
按热度按时间hwamh0ep1#
您的代码正在选择“全部”
span
元素,使它们在应用新样式时都成为目标。相反,您应该只针对
span
元素,其innerhtml与selectHTML()
. 像这样:irtuqstp2#
问题是,每次单击时,它都会将样式添加到返回的内容中
$(span)
. 现在,单击几下,就有了多个跨距。$(span)
将返回集合,样式将应用于所有集合。注意,您正在从selechtml函数返回span的innerhtml。而是返回元素并与jquery选择器一起使用它
$()
引用正确的span
元素。如果您想使用innerhtml,可以使用返回的值。
wko9yo5t3#
以粗体为例,您的代码是这样的:获取所选文本。对所选文本不执行任何操作。然后,对于所有span标记,将font-weight css属性设置为粗体。
我没有看到所列代码的任何span标记。