2012-01-16 15 views
12

Quisiera hacer el siguiente paso usando jquery. ¿Alguien sabe una gran solución?Cómo cambiar el orden de la etiqueta html usando jquery

  1. Obtiene el objeto DOM del elemento "ul".

    <ul id="rows"> 
        <li class="row1"> 
         <a class="row1-1" href="/kensaku2/Page1" title="page1"> 
         2011/11/16</a> 
        </li> 
        <li class="row2"> 
         <a class="row1-2" href="/kensaku2/Page2" title="page2"> 
         2011/11/15</a> 
        </li> 
        <li class="row3"> 
         <a class="row1-3" href="/kensaku2/Page3" title="page3"> 
         2011/12/21</a> 
        </li> 
        <li class="row4"> 
         <a class="row1-4" href="/kensaku2/Page4" title="page4"> 
         2011/12/05</a> 
        </li> 
    </ul> 
    
  2. Encuentra elemento "li" que tiene contenido "a" del elemento es igual a '2011/12/21'. (Este es el elemento li "row3")

  3. Mueva el elemento "li" al cabezal. (Véase también el código de abajo.)

    <ul id="rows"> 
        <li class="row3"> 
         <a class="row1-3" href="/kensaku2/Page3" title="page3"> 
         2011/12/21</a> 
        </li> 
    
        <li class="row1"> 
         <a class="row1-1" href="/kensaku2/Page1" title="page1"> 
         2011/11/16</a> 
        </li> 
        <li class="row2"> 
         <a class="row1-2" href="/kensaku2/Page2" title="page2"> 
         2011/11/15</a> 
        </li> 
        <li class="row4"> 
         <a class="row1-4" href="/kensaku2/Page4" title="page4"> 
         2011/12/05</a> 
        </li> 
    </ul> 
    

ya que sé cómo llegar DOM objeto de elemento "ul" como este.

$("#rows").get(0) 

Pero no sé el paso 2 y 3. Por lo tanto, me gustaría preguntar a los expertos.

+0

en Movimiento: http://stackoverflow.com/ques ciones/1279957/jquery-how-to-move-an-element-into-another-element –

+0

Para encontrar un elemento que contenga un valor: http://api.jquery.com/contains-selector/ –

Respuesta

6

Esto seleccionará el elemento a cuyo texto es "2011/12/21" y mover el padre li como primer hijo:

$('#rows a:contains("2011/12/21")').parent().prependTo('#rows'); 

Demo

+0

Buena respuesta usando el pseudo-selector ': contains'. Creo que es más performativo que '.filter()'. –

+0

De acuerdo, y esto probablemente resolverá el problema muy bien. Sin embargo, se debe señalar que esto no funcionará si una coincidencia * exacta * es lo que busca OP. – karim79

+0

De hecho, '2011/12/21 BC' también quedaría atrapado, aunque mirando el marcado de muestra, parece que se mantiene en YYYY/MM/DD. –

3
$("#rows li").filter(function() { 

    // trimming is needed in this case, it seems 
    return $.trim($(this).text()) === "2011/12/21"; 
}).prependTo("#rows"); 

Demo.

+0

+1, pero yo cree que quiere $ (this) .find ("a"). text() === –

+0

@Adam Rackis - No es necesario, ya que '.text()' solo extraerá el texto sin formato, ignorando el marcado, por lo que no lo hace realmente importa en este caso. – karim79

+0

No es broma, no lo sabía ... tiene sentido. –

2
$("#rows li a").filter(function(){return $(this).text()=='2011/12/21'}) 

esto va a seleccionar el valor deseado moverla donde quieras

1

Puede usar algo como esto:

$("#rows li a:contains('2011/12/21')").parent().prependTo("#rows"); 

Esto utilizará un selector para encontrar la etiqueta <a> que contiene el texto deseado, obtener su matriz y luego anteponer a los que #rows objeto. Preprend significa sumarlo como un niño, pero conviértalo en el primer niño.

Se puede ver una obra de demostración aquí: http://jsfiddle.net/jfriend00/7MRXs/

+0

¡Gracias por tu explicación! –

1

Si quieres hacer algo más de clasificación basado en las fechas y no sólo el contenido de ese elemento único que usted describe, es posible que desee utilizar un elemento de clasificación complemento como éste:

http://james.padolsey.com/javascript/sorting-elements-with-jquery/

que funcionará como esto (no probado):

$('li').sortElements(function(a, b){ 
    var dateA = parseInt($(a).find('a').text().replace('/', ''), 10); 
    var dateB = parseInt($(b).find('a').text().replace('/', ''), 10); 

    return dateA <= dateB ? -1 : 1; // you might want to switch this one 
}); 
+0

Lo comprobaré. ¡Gracias! –

Cuestiones relacionadas