Pregunta

En relación con mi pregunta anterior (gracias por su respuesta Cryo), tengo una pregunta adicional para los genios de JavaScript aquí.

Dada una estructura html como esto:

<content>
    <div entry>
        <div rubric>
            <a name>
        </div>
        <div content block>
            <p>
            <a links>
        </div>
    </div entry>
    .
    .
    . multiple identical entry divs

</content>

El uso de jQuery que quería encontrar un nombre de anclaje dado, y devolver todo el código HTML de su div que contiene la entrada, con un nuevo nombre de clase, como una cadena que se puede pasar a jugador html de shadowbox como esto:

"""
<div newclassname>
    <div rubric>
        <a name>
    </div>
    <div content block>
        <p>
        <a links>
    </div>
</div>
"""

El siguiente código hace esto, pero con una sola arruga, se invierte el orden del documento de

y
.

var $pageEntry = null;

jQuery.get('thatPage.html', function(data){
    $pageEntry = jQuery(data).find("#content");
});

function displayEntry(entry){
    html = $pageEntry.find("a[name='" + entry + "']")
        .parent()
        .siblings()
        .andSelf()
        .wrapAll('<div class="newclassname"></div')
        .parent()
        .parent()
        .html()

    Shadowbox.open({
        options: {
            enableKeys: false
        },
        player: 'html',
        content: html
    });
};

Puede alguien sugerir una cadena jQuery menos detallado que conserva el orden del documento de los elementos en la cadena devuelta? Cualquier sugerencia u observaciones votos serían bien recibidos. Si hay una manera más directa de hacer esto en js rectas, me gustaría saber eso también.

Gracias,

jjon

Actualización: La respuesta gracias a los comentarios de puntiagudo:

elem = $("#content")
.find("a[name=entry]")
.parent()
.parent()
.wrapAll('<div class="new"></div')
.parent()
.html()
¿Fue útil?

Solución

Bueno, lo más sencillo para mí sería para asegurarse de que los pares de la rúbrica y el contenido de los bloques comparten algún tipo de marcador de clase. Entonces usted podría ir desde los enlaces de todo el camino hasta el recipiente exterior y encontrar los 2 divs de interés.

[editar] Oh, espera - que ya están dentro de una "entrada" div, es así? Si bien siempre hay un contenedor alrededor de cada rúbrica / div contenido de par, entonces por qué no ir a partir de la "a" etiquetar a ese nivel y luego conseguir que los niños divs?

// ...
html = $pageEntry.find('a ... ')
  .parent().parent()
  .children()
  .wrapAll('<div class="newclassname"/>')
  // ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top