2011-10-26 17 views
9

¿Podría alguien decirme cómo puedo modificar el html antes de insertarlo en el documento?jQuery - modificar cadena HTML

Ésta es una llamada AJAX:

url: "http://localhost/cart/public/admin/album", 
success: function(html) { 

Este es el resultado de la llamada AJAX:

<div class="main-content slide-in"> 
    <h1>Create Album</h1> 
    <div class="inner"> 
    </div> 
</div> 

Todo lo que quiero hacer es cambiar el color de la etiqueta h1. He agregado este código

url: "http://localhost/cart/public/admin/album", 
success: function(html) { 
    $(html).find('h1').css('color','red'); 
    $('aside').after(html); 

Sin embargo, esto no tiene ningún efecto. Sin embargo, el selector jQuery parece estar funcionando.

url: "http://localhost/cart/public/admin/album", 
success: function(html) { 
    $(html).find('h1').css('color','red'); 
    console.log($(html).find('h1').length); 
    $('aside').after(html); 

Utilizando console.log salidas correctas 1. Por lo tanto, es encontrar el h1. Por alguna razón, aunque el estilo CSS no se está aplicando.

Estoy atascado. ¿Me estoy perdiendo un paso?

+0

¿Estás tratando de cambiar el color del texto o el color de fondo? –

+0

¿Puedes hacer una demostración de http://jsfiddle.net de este problema? – Petr

+0

Su código debería funcionar, ¿está seguro de que su página no contiene ninguna regla para ocultar los elementos que está agregando? –

Respuesta

17

Parece que se está cambiando el color y luego añadir la cadena sin cambios a la DOM. Prueba esto:

success: function(html) { 
    var $html = $(html); 
    $html.find('h1').css('color','red'); 
    $('aside').after($html); 
+0

gran respuesta :) se podría simplificar de la siguiente manera: $ html.find ('h1'). Css ('color', 'rojo'). End(). InsertAfter ('aside') – Kato

+0

Nota: Si desea elemento raíz de la cadena, no puede usar 'encontrar' en él, ya que la variable * es * el elemento raíz. –

0

Trate de añadir !important al estilo css:

$(html).find('h1').css("color", "red !important"); 
+1

No puede usar! Important en una llamada .css. –

2

Prueba esto:

$(html).find('h1').css('color', 'red').parent().insertAfter('aside');

+0

esto solo insertaría h1 y no todo el elemento html – Kato

+0

Tiene toda la razón, editado. –

3

La respuesta aceptada aquí realmente desperdicia mucho de mi tiempo. Al menos no es genérico. Esto es lo que descubrí después de algún tiempo.

$.ajax({ 
    url: "http://localhost/~yoelusa/the-url-of-your-string.html", 
    success: function(htmldata) { 
    var $html = $("<div/>").append(htmldata); 
    // make your changes on the html string, see some example bellow relevant to my htmlstring 
    $html.find('#left').html(""); 
    $html.find('#right').html(""); 
    $html.find('.commentlist').remove(); 
    // when you are ready to insert your string somewhere call the html() function, in my example I inserted it in an iframe 
    $("iframe").attr("srcdoc", $html.html()); 
    } 
});