2010-11-14 17 views
14

¿Existe una forma de navegador cruzado para obtener HTML del texto seleccionado?HTML del texto seleccionado

+0

posible duplicado de (http://stackoverflow.com/questions/10478/getting-selected-text-in-a-browser-cross-platform) – Sarfraz

+5

Ninguna de las respuestas a esa pregunta es muy buena, y es una pregunta diferente: solicita el texto seleccionado, no el HTML de el texto seleccionado. –

+0

Ya respondieron en SO http://stackoverflow.com/questions/10478/getting-selected-text-in-a-browser-cross-platform – wiifm

Respuesta

31

Esta función hará en todos los principales navegadores: [. Conseguir texto seleccionado en un navegador, multiplataforma]

function getSelectionHtml() { 
 
    var html = ""; 
 
    if (typeof window.getSelection != "undefined") { 
 
     var sel = window.getSelection(); 
 
     if (sel.rangeCount) { 
 
      var container = document.createElement("div"); 
 
      for (var i = 0, len = sel.rangeCount; i < len; ++i) { 
 
       container.appendChild(sel.getRangeAt(i).cloneContents()); 
 
      } 
 
      html = container.innerHTML; 
 
     } 
 
    } else if (typeof document.selection != "undefined") { 
 
     if (document.selection.type == "Text") { 
 
      html = document.selection.createRange().htmlText; 
 
     } 
 
    } 
 
    return html; 
 
} 
 

 

 
// bind events for selection 
 

 
document.addEventListener('mouseup', function(){ 
 
    var selectedHTML = getSelectionHtml(); 
 
    if(selectedHTML) 
 
    console.log(selectedHTML) 
 
}); 
 

 
document.addEventListener('keyup', function(e){ 
 
    var selectedHTML, key = e.keyCode || e.which; 
 
    if(key == 16){ // if "shift" key was released 
 
    selectedHTML = getSelectionHtml(); 
 
    if(selectedHTML) 
 
     console.log(selectedHTML) 
 
    } 
 
});
<ul contenteditable> 
 
    <li><p>Select <b>this</b> <em>text</em> right <i>here</i></p></li> 
 
    <li>Or <b>this text</b></li> 
 
</ul>

+2

El problema de esta solución es que cuando se selecciona la parte de enganche de las tapas de

primer texto del párrafo A SER

texto seleccionado segundo párrafo

de que no te espera" que

SER SELECCIONADO "pero"

TEXTO A

SELECCIONE

- por alguna razón etiquetas de anuncios del navegador que no están en la selección para cerrar las que están. ¿Hay alguna manera de obtener solo lo que realmente está en la selección? – honzzz

+2

Un documento HTML es fundamentalmente un árbol de nodos. Una vez que el texto HTML inicial ha sido analizado, esencialmente se ha ido y usted tiene que tratar en los nodos. Sería posible (pero relativamente complicado) convertir la selección en el tipo de cadena que sugiere, pero no hay garantía de que coincida con el texto HTML original, que es solo una de las muchas formas igualmente válidas de representar el documento. –

+0

Funciona para mí gracias !! También me dio una idea ... –

Cuestiones relacionadas