Comment puis-je obtenir L'élément DOM qui contient la sélection courante?
Vous pouvez sélectionner une partie d'une page web avec la souris.
je sais que je peux obtenir le texte actuellement sélectionné mais comment puis-je obtenir L'élément DOM qui contient le début ou la fin de la sélection courante?
32
demandé sur
Aaron Digulla
2009-08-26 18:47:39
2 réponses
Dans IE, utilisez document.sélection.createRange ().parentElement () et dans les navigateurs réels utilisent window.getSelection ().getRangeAt (0).startContainer.parentNode. Quelque chose comme ceci:
function getSelectedNode()
{
if (document.selection)
return document.selection.createRange().parentElement();
else
{
var selection = window.getSelection();
if (selection.rangeCount > 0)
return selection.getRangeAt(0).startContainer.parentNode;
}
}
26
répondu
InvisibleBacon
2009-08-26 14:57:19
La suite sera de retour le conteneur l'élément de la limite de début ou de fin de la sélection courante, en utilisant le booléen isStart
pour spécifier si vous voulez la limite de début ou de fin. Il fonctionnera dans la plupart des navigateurs grand public. Ajouter des tests de fonctionnalité pour plus de Robustesse.
function getSelectionBoundaryElement(isStart) {
var range, sel, container;
if (document.selection) {
range = document.selection.createRange();
range.collapse(isStart);
return range.parentElement();
} else {
sel = window.getSelection();
if (sel.getRangeAt) {
if (sel.rangeCount > 0) {
range = sel.getRangeAt(0);
}
} else {
// Old WebKit
range = document.createRange();
range.setStart(sel.anchorNode, sel.anchorOffset);
range.setEnd(sel.focusNode, sel.focusOffset);
// Handle the case when the selection was selected backwards (from the end to the start in the document)
if (range.collapsed !== sel.isCollapsed) {
range.setStart(sel.focusNode, sel.focusOffset);
range.setEnd(sel.anchorNode, sel.anchorOffset);
}
}
if (range) {
container = range[isStart ? "startContainer" : "endContainer"];
// Check if the container is a text node and return its parent if so
return container.nodeType === 3 ? container.parentNode : container;
}
}
}
54
répondu
Tim Down
2013-07-17 10:17:07