¿Alguien tiene alguna sugerencia sobre cómo editar un enlace en un contentEditable div? Sería ideal que, una vez que se hace clic con el mouse en el enlace, o que el cursor toca el enlace, que aparezca un pequeño mensaje emergente y que el usuario pueda cambiar la propiedad href del enlace. El mensaje no es el problema, pero ¿cómo es posible detectar que se ha hecho clic en el enlace o que el cursor ha llegado al enlace? onfocus no parece funcionar en un div de contentEditable en Firefox & Safari. ¿Algunas ideas?Cómo editar un enlace dentro de un contentEditable div
9
A
Respuesta
15
Estoy bastante seguro de que esto es lo que estaba buscando, sin embargo, utilicé jQuery solo para hacer que el concepto sea un poco más fácil de burlar. jsbin vista previa disponible, así que ve a verlo. Si alguien puede convertir esto en JS puro por el bien de la respuesta, lo he convertido en una wiki comunitaria.
Funciona enlazando los eventos keyup/click en el divisor editable, luego verificando el nodo que los usuarios usan en window.getSelection()
para los estándares, o document.selection
para los IE. El resto del código maneja el estallido/manejo de las ediciones.
métodos jQuery:
function getSelectionStartNode(){
var node,selection;
if (window.getSelection) { // FF3.6, Safari4, Chrome5 (DOM Standards)
selection = getSelection();
node = selection.anchorNode;
}
if (!node && document.selection) { // IE
selection = document.selection
var range = selection.getRangeAt ? selection.getRangeAt(0) : selection.createRange();
node = range.commonAncestorContainer ? range.commonAncestorContainer :
range.parentElement ? range.parentElement() : range.item(0);
}
if (node) {
return (node.nodeName == "#text" ? node.parentNode : node);
}
}
$(function() {
$("#editLink").hide();
$("#myEditable").bind('keyup click', function(e) {
var $node = $(getSelectionStartNode());
if ($node.is('a')) {
$("#editLink").css({
top: $node.offset().top - $('#editLink').height() - 5,
left: $node.offset().left
}).show().data('node', $node);
$("#linktext").val($node.text());
$("#linkhref").val($node.attr('href'));
$("#linkpreview").attr('href', $node.attr('href'));
} else {
$("#editLink").hide();
}
});
$("#linktext").bind('keyup change', function() {
var $node = $("#editLink").data('node');
$node.text($(this).val());
});
$("#linkhref").bind('keyup change', function() {
var $node = $("#editLink").data('node');
$node.attr('href', $(this).val());
$node.and('#linkpreview').attr('href',$(this).val());
});
});
Cuestiones relacionadas
- 1. Extrayendo texto de un contentEditable div
- 2. ¿Cómo puedo desenfocar un div donde contentEditable = true?
- 3. ¿Cómo desplazarse a un elemento dentro de un div?
- 4. ¿Cómo agrego target = "_ blank" a un enlace dentro de un div especificado?
- 5. Jeditable para editar un enlace. Ayuda
- 6. ¿Cómo adjuntar una devolución de llamada onclick a un div pero no en un enlace dentro del div?
- 7. Sombra dentro de un div
- 8. ¿Cómo establecer un mapa para div dentro de otro div?
- 9. Permitir tabulación en un contentEditable div con execCommand
- 10. etiquetas span envolver dentro de un div
- 11. Ajuste de la posición de intercalación a un nodo vacío dentro de un elemento contentEditable
- 12. Insertar texto en Javascript contenteditable div
- 13. Cómo encontrar un div dentro de un iframe
- 14. Cómo agregar un Lienzo html5 dentro de un DIV
- 15. ¿Cómo hacer un div dentro de un td para estirar?
- 16. Cómo incrustar un div HTML dentro de un SVG
- 17. ¿Cómo puedo habilitar 'arrastrar' en un elemento con contentEditable?
- 18. Insertar enlace en el elemento contenteditable
- 19. contenteditable div no realmente editable en webkit
- 20. Seleccione el rango en contenteditable div
- 21. Mostrar Adobe pdf dentro de un div
- 22. Hacer DIV fijo dentro de un DIV desplazable
- 23. encontrar dentro de un div clase seleccionada
- 24. Insertar imagen en div "contenteditable" usando popup
- 25. ¿Cómo verifico si el texto bajo el cursor en un div contenteditable es "negrita"
- 26. ¿Cuáles son las desventajas de usar un div de contentEditable en lugar de un textarea?
- 27. ¿Qué tan confiable es usar contenteditable en un div para un editor WYSIWYG?
- 28. reemplazar el texto seleccionado en contenteditable div
- 29. Div no transparente dentro de un div transparente
- 30. alineación vertical div dentro de un div usando jquery?
muy fresco, gracias mucho !!! –