Javascript 在html中,当多个样式附加到给定的单词时,如何使用范围API单击选择一个单词

Javascript 在html中,当多个样式附加到给定的单词时,如何使用范围API单击选择一个单词,javascript,range,selection,Javascript,Range,Selection,例如,我有这样的html: <span>"This is s"<strong>xy</strong>"z"<strong>ample</strong>" text"</span> 我正在使用window.getSelection()、范围、节点 代码片段如下所示 <span class="clickable">"This is s"<strong>xy</strong>"z"<st

例如,我有这样的html:

<span>"This is s"<strong>xy</strong>"z"<strong>ample</strong>" text"</span>
我正在使用window.getSelection()、范围、节点

代码片段如下所示

<span class="clickable">"This is s"<strong>xy</strong>"z"<strong>ample</strong>" text"</span>

$(".clickable").click(function(e) {
s = window.getSelection();
var range = s.getRangeAt(0);
var node = s.anchorNode;
while (range.toString().indexOf(' ') != 0) {
    range.setStart(node, (range.startOffset - 1));
}
range.setStart(node, range.startOffset + 1);
do {
    range.setEnd(node, range.endOffset + 1);

} while (range.toString().indexOf(' ') == -1 && range.toString().trim() != 
'' && range.endOffset < node.length);
var str = range.toString().trim();
alert(str);
});​
“这是s”xy“z”示例“文本”
$(“.clickable”)。单击(函数(e){
s=window.getSelection();
var范围=s.getRangeAt(0);
var节点=s.anchorNode;
while(range.toString().indexOf(“”)!=0){
range.setStart(节点,(range.startOffset-1));
}
range.setStart(节点range.startOffset+1);
做{
range.setEnd(节点,range.endOffset+1);
}而(range.toString().indexOf(“”)=-1&&range.toString().trim()!=
''&&range.endOffset
@Yousof K,如果将多个样式附加到单个单词(如strong)上,则此解决方案不起作用。我明白了。您介意在JSFIDLE中上传您的代码吗?可能会增加你在这里得到帮助的机会。@YousofK。在JSFIDLE中上载代码@Yousof K,这个解决方案在多个样式附加到单个单词(如strong)的情况下不起作用。我明白了。您介意在JSFIDLE中上传您的代码吗?可能会增加你在这里得到帮助的机会。@YousofK。在JSFIDLE中上载代码。
<span class="clickable">"This is s"<strong>xy</strong>"z"<strong>ample</strong>" text"</span>

$(".clickable").click(function(e) {
s = window.getSelection();
var range = s.getRangeAt(0);
var node = s.anchorNode;
while (range.toString().indexOf(' ') != 0) {
    range.setStart(node, (range.startOffset - 1));
}
range.setStart(node, range.startOffset + 1);
do {
    range.setEnd(node, range.endOffset + 1);

} while (range.toString().indexOf(' ') == -1 && range.toString().trim() != 
'' && range.endOffset < node.length);
var str = range.toString().trim();
alert(str);
});​