Digamos que tengo tres elementos <div>
en una página. ¿Cómo puedo intercambiar las posiciones del primer y tercer <div>
? jQuery está bien.elemento en movimiento de JavaScript en el DOM
Respuesta
Trivial con jQuery
$('#div1').insertAfter('#div3');
$('#div3').insertBefore('#div2');
Si usted quiere hacerlo en varias ocasiones, tendrá que utilizar diferentes selectores ya que los divs conservarán sus identificaciones, ya que se mueven alrededor.
$(function() {
setInterval(function() {
$('div:first').insertAfter($('div').eq(2));
$('div').eq(1).insertBefore('div:first');
}, 3000);
});
jQuery.fn.swap = function(b){
b = jQuery(b)[0];
var a = this[0];
var t = a.parentNode.insertBefore(document.createTextNode(''), a);
b.parentNode.insertBefore(a, b);
t.parentNode.insertBefore(b, t);
t.parentNode.removeChild(t);
return this;
};
y utilizar de esta manera:
$('#div1').swap('#div2');
si no desea utilizar jQuery fácilmente se podría adaptar la función.
No hay necesidad de utilizar una biblioteca para una tarea tan trivial:
var divs = document.getElementsByTagName("div"); // order: first, second, third
divs[2].parentNode.insertBefore(divs[2], divs[0]); // order: third, first, second
divs[2].parentNode.insertBefore(divs[2], divs[1]); // order: third, second, third
Esto tiene en cuenta el hecho de que getElementsByTagName
devuelve un NodeList vivo que se actualiza automáticamente para reflejar el orden de los elementos en el DOM mientras son manipulados.
También es posible usar:
var divs = document.getElementsByTagName("div"); // order: first, second, third
divs[0].parentNode.appendChild(divs[0]); // order: second, third, first
divs[1].parentNode.insertBefore(divs[0], divs[1]); // order: third, second, third
y hay varias otras permutaciones posibles, si tienes ganas de experimentar:
divs[0].parentNode.appendChild(divs[0].parentNode.replaceChild(divs[2], divs[0]));
por ejemplo :-)
Cierto, pero es difícil discutir con la elegancia y la legibilidad que proporciona algo como jQuery, sin mencionar las capacidades mejoradas listas para usar. –
Dicho esto, +1 para el enfoque desnudo. –
Sí, pero ¿quién solo hace esto? – tvanfosson
enfoque mencionado en Jquery la parte superior funcionará También puede usar JQuery y CSS. Por ejemplo, en Div uno ha aplicado class1 y div2 ha aplicado class class2 (digamos por ejemplo, cada clase de css proporciona una posición específica en el navegador), ahora puede intercambiar las clases use jquery o Javascript (que va a cambiar la posición)
var swap = function() {
var divs = document.getElementsByTagName('div');
var div1 = divs[0];
var div2 = divs[1];
var div3 = divs[2];
div3.parentNode.insertBefore(div1, div3);
div1.parentNode.insertBefore(div3, div2);
};
Esta función puede parecer extraño, pero en gran medida se basa en estándares con el fin de funcionar correctamente. De hecho, puede funcionar mejor que the jQuery version that tvanfosson posted, lo que parece hacer el intercambio solo dos veces.
¿En qué normas se basa?
insertarAntes Inserta el nodo newChild antes del nodo secundario existente refChild. Si refChild es nulo, inserte newChild en al final de la lista de elementos secundarios. Si newChild es un objeto DocumentFragment, todos sus elementos secundarios están insertados, en el mismo orden, antes de refChild. Si newChild ya es en el árbol, primero se elimina.
Lo siento por chocar este hilo Tropecé con el problema de "intercambio de DOM-elementos" y jugado un poco un poco
El resultado es una "solución" jQuery nativo que parece ser muy bonito (por desgracia, no sé qué está sucediendo en las partes internas de jQuery cuando se hace esto)
El Código:
$('#element1').insertAfter($('#element2'));
La documentación de jQuery dice t sombrero insertAfter()
mueve el elemento y no clonarlo
.before y .after
Uso JS vainilla moderna! Mucho mejor/más limpio que antes
const div1 = document.getElementById("div1");
const div2 = document.getElementById("div2");
const div3 = document.getElementById("div3");
div2.after(div1);
div2.before(div3);
Browser Support - 84% global, el 87% de los EE.UU. como Mar '18
Sin soporte de Internet Explorer todavía. – Norris
No debería tener que escribir un código menos sostenible para ayudar a las personas en los navegadores antiguos o que no cumplan con los estándares. A menos que trabaje en una empresa, pocos usuarios se perderán el – Gibolt
. Otros métodos funcionan igual de bien con respecto a la capacidad de mantenimiento, especialmente cuando se ajustan en una función de limpieza agradable. Estoy a favor de escribir código moderno, pero esto es una sangría. Es genial saber qué depara el futuro, pero por mucho que me desagrade todo lo relacionado con IE, es importante 'saber' cuál es el impacto de tus decisiones. En este caso, una aplicación web rota en cualquier navegador IE. Si te parece bien, ¡genial!Agregué el comentario solo para informar a cualquiera que esté buscando en Google :) – Norris
- 1. ¿Cómo reemplazar el elemento DOM en su lugar usando Javascript?
- 2. Movimiento del mouse en el elemento
- 3. Como eliminar el elemento dom
- 4. Prueba del tipo de un elemento DOM en JavaScript
- 5. elemento DOM DOM eliminar
- 6. Agregar un elemento al DOM con JavaScript
- 7. ¿Cómo agregar una clase al elemento DOM en JavaScript?
- 8. ¿Puede javascript escuchar "onDomChange" en cada elemento Dom?
- 9. Javascript obtener el elemento DOM una función se llama desde
- 10. Obtener ID de dom-elemento
- 11. En Javascript, ¿puedes extender el DOM?
- 12. ¿Debo usar un fragmento DOM como dom Shadow en mi motor de juegos Javascript?
- 13. Motores de plantilla de JavaScript basados en DOM DOM
- 14. Envolviendo un elemento DOM dentro de un objeto JavaScript
- 15. Manejo del movimiento del mouse de cámara en Javascript (permitiendo el movimiento continuo del mouse)
- 16. ¿Implementación DOM en javascript puro?
- 17. Cuenta de palabras de Javascript para cualquier elemento DOM dado
- 18. Es elemento antes o después de otro elemento en DOM
- 19. Javascript Borrar DOM
- 20. Averiguar en qué número de línea se encuentra un elemento en dom en Javascript?
- 21. Mover un elemento DOM con append()?
- 22. Cómo mover un elemento en Movimiento diagonal en jQuery?
- 23. resaltar un elemento DOM al pasar el mouse, como inspeccionar
- 24. HTML DOM ¿Transacción de dibujo en Javascript?
- 25. ¿Cómo puedo convertir un elemento DOM en un elemento jQuery?
- 26. jquery programmatically haga clic en el nuevo elemento dom
- 27. Evento Visibilidad JQuery/Javascript/DOM
- 28. jQuery mueve el elemento DOM dentro del elemento primario
- 29. Cómo asignar ID de elemento DOM único
- 30. ¿Cómo puedo establecer un css ": hover" en un elemento creado DOM en JavaScript?
hay un error en alguna parte. Parece que solo funciona dos veces. http://jsbin.com/evedu –
Solo esperaba que funcionara una vez. – tvanfosson
@Ionut: el punto es que depende de la posición relativa de los elementos. Una vez que cambias el orden, ya no puedes encontrar el primero y el tercero por sus identificadores y necesitas trabajar de otra manera. Mi respuesta solo pretendía ilustrar la funcionalidad de los métodos para lograr la tarea solicitada, no ser una solución integral para intercambiar los primeros y terceros div en un conjunto un número arbitrario de veces. – tvanfosson