我正在测试getSelection()
方法,我希望我的程序在一段文本中获取所选文本并将其显示在div标签中。我使用了以下代码:
var txt = document.getSelection();
document.getElementById("display").innerHTML = "The text you have selected is: " + txt + ".";
但是,我希望程序只能在段落本身中进行选择,而不是在整个文档中。我尝试使用document.getElementById("id").getSelection();
,但它没有用。
我怎样才能使getSelection()
仅适用于某个元素?
答案 0 :(得分:3)
getSelection()
仅作为window
和document
的方法提供。如果你想得到一个只代表特定节点内用户选择部分的Range,这里有一个函数来做,使用我的Rangy库(没有库的代码会更长,超出我的热情现在写):
function getSelectedRangeWithin(el) {
var selectedRange = null;
var sel = rangy.getSelection();
var elRange = rangy.createRange();
elRange.selectNodeContents(el);
if (sel.rangeCount) {
selectedRange = sel.getRangeAt(0).intersection(elRange);
}
elRange.detach();
return selectedRange;
}
答案 1 :(得分:2)
这是一种方法,只在Chromium 19(支持textContent
中测试,因为必须使用Internet Explorer innerText
):
function getSelectedText() {
if (window.getSelection) {
return window.getSelection().toString();
} else if (document.selection) {
return document.selection.createRange().text;
}
return '';
}
var b = document.getElementsByTagName('body')[0],
o = document.getElementById('output');
b.onmouseup = function(e){
var selText = getSelectedText(),
targetElem = e.target.tagName.toLowerCase();
if (selText && targetElem == 'p') {
o.textContent = 'You selected the text: "' + selText + '" from a ' + targetElem + ' element.';
}
};
答案 2 :(得分:0)
function getSelected() {
if(window.getSelection) { return window.getSelection(); }
else if(document.getSelection) { return document.getSelection(); }
else {
var selection = document.selection && document.selection.createRange();
if(selection.text) { return selection.text; }
return false;
}
return false;
}
用coffeescript写的:
getSelected = ->
if window.getSelection
return window.getSelection()
else if document.getSelection
return document.getSelection()
else
selection = document.selection and document.selection.createRange()
return selection.text if selection.text
return false
false
美味的javascript