我有一个字符串,单词五次。如果我选择了你好,它应该返回4
<div id="content">hello hai hello hello hello</div>
获取选定的文字脚本
<script>
if(window.getSelection){
t = window.getSelection();
}else if(document.getSelection){
t = document.getSelection();
}else if(document.selection){
t =document.selection.createRange().text;
}
</script>
如果选择hai
,则应返回1
。
如果选择hello hai
,则应返回1
。请帮忙。
答案 0 :(得分:8)
假设<div>
的内容保证是单个文本节点,这不是太难。以下不适用于IE&lt; 9,不支持Selection和Range API。如果您需要对这些浏览器的支持,我可以为此特定案例提供代码,或者您可以使用我的Rangy库。
现场演示:http://jsfiddle.net/timdown/VxTfu/
代码:
if (window.getSelection) {
var sel = window.getSelection();
var div = document.getElementById("content");
if (sel.rangeCount) {
// Get the selected range
var range = sel.getRangeAt(0);
// Check that the selection is wholly contained within the div text
if (range.commonAncestorContainer == div.firstChild) {
// Create a range that spans the content from the start of the div
// to the start of the selection
var precedingRange = document.createRange();
precedingRange.setStartBefore(div.firstChild);
precedingRange.setEnd(range.startContainer, range.startOffset);
// Get the text preceding the selection and do a crude estimate
// of the number of words by splitting on white space
var textPrecedingSelection = precedingRange.toString();
var wordIndex = textPrecedingSelection.split(/\s+/).length;
alert("Word index: " + wordIndex);
}
}
}
答案 1 :(得分:3)
您需要使用DOM的Range功能。以下是获取当前所选范围的方法:
var currentRange = window.getSelection().getRangeAt(0);
从那里,currentRage.startOffset会告诉你选择在文件中的位置。因此,您需要将其与元素的起始范围进行比较:
var myContent = document.getElementById('content');
var divRange = document.createRange ();
divRange.selectNodeContents (myContent);
现在你可以将divRange.startOffset与你的选择startOffset进行比较,并确定你所在的那个。