2011-05-13 10 views
5

Si tengo estos objetos:¿Cómo agregar una div entre dos Divs en base a sus identificaciones usando Jquery?

<div id='1'></div> 
<div id='2'></div> 
<div id='3'></div> 
<div id='4'></div> 
<div id='5'></div> 

tengo un cuadro de texto:

<input type="text"> 

Cuando escribo en el valor: 3,5 para hacer dinámicamente (no tengo el código para esto, la parte siguiente, necesito ayuda con):

<div id='3.5'></div> 

Como puedo adjuntarlo en este orden a continuación, sin consultar primero a ver el valor de cada div en la página?

<div id='1'></div> 
<div id='2'></div> 
<div id='3'></div> 
<div id='3.5'></div> 
<div id='4'></div> 
<div id='5'></div> 

Usando:

$('#What Goes Here If I Dont know the elements on the page?').after('<div id='3.5'>Hey</div>'); 

se aprecia Cualquier ayuda,

Taylor

+0

No creo que sea un CSS válido para tener identificaciones o clases que comiencen con un número. – drudge

+0

¿Por qué necesita ID ordenado: s? O ¿por qué necesita ID: s en absoluto? Si tiene un div que contiene un id (o clase), puede acceder a sus elementos secundarios en orden. –

+0

Sí, lo siento por el número de identificación en mi ejemplo, solo escribí eso para los propósitos de este ejemplo – TaylorMac

Respuesta

11

identificadores en el DOM debe no inicio con un número (que no serían válidos) .
Deben comenzar con un carácter A-Za-z y luego pueden tener números, - y _ siguientes.

pero si quieres ir a la ruta intente esto:

var div = $("<div id='3.5'></div>"); 
div_id_after = Math.floor(parseFloat(div.get(0).id)); 

$('#'+div_id_after).after(div); 

Aquí es una demostración de violín: http://jsfiddle.net/maniator/DPMV5/

+0

Sé que lo siento, para los propósitos de este ejemplo, quería hacerlo simple, lo haré por supuesto tener en cuenta las reglas para las ID – TaylorMac

+0

@TaylorMac, ver mi actualización, hacer un violín ahora (que jsfiddle no se está cargando en este momento) – Neal

+0

Impresionante. Eso sería genial, nunca había visto el uso de parseFloat antes de – TaylorMac

1

Qué hay de malo en esto?

$('#3').after('<div id='3.5'>Hey</div>'); 
+0

Quiere encontrar dinámicamente el div que debe insertar después. – villecoder

+0

@villecoder, ver mi actualización a continuación – Neal

+0

@Neal, lo hice. Toda una solución ingeniosa :) – villecoder

1

En primer lugar, no se permite que los ID comiencen con un número.

Ignorando que, si solo permite números enteros, es fácil, simplemente tome 1 del valor e insértelo, luego renumere el resto. De lo contrario, tendrá que caminar el DOM para verificar primero los valores de los demás.

0

esa comparación para agregar es aritmética, por lo que no es fácil que deba iterar sobre los divs podría hacerlo. tal vez deberías hacer relleno, como 3 = 300000, entonces 3.5 es 3500000, para hacer una mejor comparación.

0

tal vez algo como eso funcionaría:

var text = yourTextBox.value; 
if(var number = Number(text)) 
{ 
    $('#'+Math.floor(number)).after('<div id='+text+'>Hey</div>'); 
} 
else alert("wrong number"); 

Pero probablemente debería comprobar primero (con una expresión regular) que el texto dentro del cuadro de texto es un número legítimo ...

0

actualizada. gracias Neal.

http://jsfiddle.net/FB8xG/3/

var newValue = 3.5; 

var oldValue = Math.floor(newValue); //3 

var oldValueID = ('#' + oldValue); 
var newValueID = ('<div id="' + newValue + '">' + newValue + '</div>'); 

$(oldValueID).after(newValueID); 
+0

que puede hacer: ' var oldValue = Math.floor (newValue); // 3' – Neal

0

Live Demo

var input = "3.5"; 
var parent = Math.floor(input); 
var dest = $('#div-'+parent); 

dest.after(dest.clone().attr('id','div-'+input).text(input)); 

Nota: Esto sólo funcionará una vez entre números enteros. Un método más robusto REQUIERE examinar los ID de todos los divs dentro del destino.

Cuestiones relacionadas