【发布时间】:2010-10-25 03:04:57
【问题描述】:
高亮文本后,我想获取所选文本所在的段落。
var select = window._content.document.getSelection();
请指点一下?
【问题讨论】:
标签: javascript window document webpage paragraph
高亮文本后,我想获取所选文本所在的段落。
var select = window._content.document.getSelection();
请指点一下?
【问题讨论】:
标签: javascript window document webpage paragraph
这实际上是相当困难的,因为你必须考虑六种情况:
因此,首先您必须确定您希望解决方案的完整性。我将只介绍 (1) 和 (2) 的最简单情况。
function getSelectedParagraphText() {
if (window.getSelection) {
selection = window.getSelection();
} else if (document.selection) {
selection = document.selection.createRange();
}
var parent = selection.anchorNode;
while (parent != null && parent.localName != "P") {
parent = parent.parentNode;
}
if (parent == null) {
return "";
} else {
return parent.innerText || parent.textContent;
}
}
注意:如果您也使用标签,请将 textContent 替换为 innerHTML。
编辑:加入了更好的版本,包括更好的浏览器兼容性。
【讨论】:
我发现这很有用example。
似乎有些浏览器支持 window.getSelection() 而其他浏览器支持 document.getSelection()。该示例处理所有这些情况。
【讨论】:
select.anchorNode.parentNode 将返回父节点,在您的情况下为
标签,然后您可以获取该节点的文本。
var x = window.getSelection()
var z = x.anchorNode.parentNode
alert(z.innerHTML)
请务必查看 window.getSelection(),因为 document.getSelection 在 firefox 中已被贬值。
【讨论】:
$.event.props.push('onTextSelect');
$(document).click(function(){
var str=window.getSelection().anchorNode.data;
var str=str.substring(window.getSelection().anchorOffset,window.getSelection().focusOffset);
if(str)
$(window.getSelection().focusNode.parentNode).trigger({type:'onTextSelect',text:str});
});
$('p').on('onTextSelect',function(e){
console.log($(this).attr('class'))
$('p:last').text(e.text);
});
html
<div><p class="p">some text</p></div>
<p></p>
你可以在这里找到小提琴https://jsfiddle.net/q9nkc0fd/6/
【讨论】:
一个新项目从 jsmatita 诞生: http://takenotes.sourceforge.net/ (是意大利语)
【讨论】:
我从@Thiago Souza 的上述答案中复制了代码,并为此创建了一个 sn-p,供那些可以提供正确答案的人使用。
function getSelectedParagraph(){
const selection = window.getSelection();
let parent = selection.anchorNode;
while (parent != null && parent.nodeName != "P") {
parent = parent.parentNode;
};
console.log(parent);
return parent;
};
window.onload = getSelectedParagraph();
<div class='paragraph-container'>
<p id='paragraph-01'>
Paragraph 1: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
<p id='paragraph-02'>
Paragraph 2: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
<p id='paragraph-03'>
Paragraph 3: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
</div>
【讨论】:
function getSelectedParagraph(){
const selection = window.getSelection();
let parent = selection.anchorNode;
while (parent != null && parent.nodeName != "P") {
parent = parent.parentNode;
}
return parent;
}
【讨论】:
parent 返回null :-(