jQuery get (), shadowbox, volver todo el html de la div que contiene
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
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()
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"/>')
// ...