【发布时间】:2017-01-12 21:32:57
【问题描述】:
我有一个文本,每个单词都用span 元素包裹,以使它们可点击。我希望能够通过单击要突出显示的第一个和最后一个单词来突出显示文本的一部分,然后单击一个单独的按钮以执行突出显示(即,将每个单词包装在所选的第一个和最后一个单词之间(包括)。在突出显示的部分之后也会添加评论。我已经取得了进展,并且已经完成了这部分:
HTML:
<div id="textbox">
<span>Foo</span> <span>foo</span> <span>foo</span> <span>foo</span>
<span>foo</span> <span>foo</span> <span>foo</span> <span>foo</span>
<span>foo</span> <span>foo</span> <span>foo</span> <span>foo</span>.
</div>
<input id="commentbox" placeholder="Type your comment here">
<button id="exechighlight" value="Highlight">
JavaScript:
$('#textbox > span').click(function() {
$(this).addClass('selected');
});
$('#exechighlight').click(function(){
if($('#commentbox').val() !== '') {
$('.selected').filter(":last").after(' <span class="comment">' + $('#commentbox').val() + '</span>');
} else {
$('.selected').filter(':last').after(' <span class="comment">Default comment</span>');
}
$('.selected').filter(":first").nextUntil('.comment').andSelf().wrapAll('<span class="highlight">');
$('.selected').removeClass('selected');
$('#commentbox').val('');
});
我可以很好地包装东西,但wrapAll() 似乎没有保留包装的span 元素之间的空格。我尝试过使用 CSS,但无济于事:
.highlight {
background-color: #f00;
white-space: pre-wrap;
white-space: -moz-pre-wrap;
}
如何进行?我还需要能够撤消突出显示,即解开 <span class='highlight'> 并保留原始间距。
【问题讨论】:
-
如果您使用 Stack Snippets(@ 987654329@ 工具栏按钮)。
-
感谢您指出这一点。下次我需要发布问题时,我会确保记住这一点!
标签: jquery jquery-selectors jquery-events