ACTUALIZACIÓN 2017:
Para seleccionar el contenido del nodo, llame:
window.getSelection().selectAllChildren(
document.getElementById(id)
);
Esto funciona en todos los navegadores modernos, incluido IE9 + (en modo estándar).
Ejemplo ejecutable:
function select(id) {
window.getSelection()
.selectAllChildren(
document.getElementById("target-div")
);
}
#outer-div { padding: 1rem; background-color: #fff0f0; }
#target-div { padding: 1rem; background-color: #f0fff0; }
button { margin: 1rem; }
<div id="outer-div">
<div id="target-div">
Some content for the
<br>Target DIV
</div>
</div>
<button onclick="select(id);">Click to SELECT Contents of #target-div</button>
La respuesta original a continuación es obsoleta ya que window.getSelection().addRange(range);
ha quedado en desuso
Respuesta original
Todos los ejemplos anteriores usan:
var range = document.createRange();
range.selectNode( ... );
pero el problema con eso es que selecciona el Nodo en sí, incluida la etiqueta DIV, etc.
Para seleccionar el texto del nodo según la pregunta de OP, debe llamar en su lugar:
range.selectNodeContents( ... )
Entonces el fragmento completo sería:
function selectText( containerid ) {
var node = document.getElementById( containerid );
if ( document.selection ) {
var range = document.body.createTextRange();
range.moveToElementText( node );
range.select();
} else if ( window.getSelection ) {
var range = document.createRange();
range.selectNodeContents( node );
window.getSelection().removeAllRanges();
window.getSelection().addRange( range );
}
}
document.getElementById('selectable')
porthis
. Luego puede agregar la funcionalidad discretamente a varios elementos, por ejemplo, varios divs en un contenedor:jQuery('#selectcontainer div').click(selectText);