2010-06-07 14 views
7

He echado un vistazo y estoy teniendo algunas dificultades para resolver un pequeño problema que estoy teniendo.Obtiene la representación de cadena de un HTML completo del objeto DOM de jquery

, básicamente, tienen una cadena de HTML, lo que convertir a un objeto jQuery DOM para que pueda eliminar fácilmente todos los elementos que tienen una cierta clase utilizando .Remove de jQuery(). Es decir,

var radHtml = editor.get_html(); 

var jqDom = $(radHtml); 

$(".thickbox", jqDom).remove(); 
$(".thickboxcontent", jqDom).remove(); 

editor.set_html(this.innerHTML); 

NOTA: El HTML se deriva de contenido en un editor de texto RadEditor lo que no hay etiquetas HTML de los padres, por lo que puede verse de la siguiente manera:

<p>This is a header</p> 
<p>this is some content followed by a table </p> 
<a href="#TB_inline?height=350&amp;width=400&amp;inlineId=myOnPageContent0" class="thickbox">Test Thickbox</a> 
<div id="myOnPageContent0" class="thickboxcontent"> 
<table class="modal"> 
    <thead> 
    </thead> 
    <tbody> 
     <tr> 
      <td>item</td> 
      <td>result</td> 
     </tr> 
     <tr> 
      <td>item 1</td> 
      <td>1</td> 
     </tr> 
     <tr> 
      <td>item 2</td> 
      <td>2</td> 
     </tr> 
     <tr> 
      <td>item 3</td> 
      <td>3</td> 
     </tr> 
    </tbody> 
</table> 
</div> 

Aquí es lo que el jqDom.html() devuelve el HTML anterior:

"This is a header" 

me preguntaba si había una manera fácil de hacer esto - tener un poco de html y eliminar todos los elementos (en este caso los divs) que tienen una determinada clase (pero dejando su contenido). JQuery no tiene que usarse, pero me gustaría.

Manipular el objeto DOM está bien - está obteniendo el objeto DOM completo en su totalidad como una cadena con la que estoy teniendo el problema.

Cualquier ayuda sería muy apreciada. Gracias.

+0

Cuando dice que .html() solo obtiene el primer elemento, ¿quiere decir que hay varios elementos hermanos dentro de un único contenedor identificado, y solo el primero está seleccionado? ¿Puedes publicar una muestra (muy reducida) del HTML en cuestión? –

+0

muestra añadida en la edición – Scozzard

Respuesta

1
var radHtml = editor.get_html(); 

var jqDom = $(radHtml); 
jqDom.wrap('div'); //dont remember if thats ok or u need to asign it in the jqDom again 
$(".thickbox", jqDom).remove(); 
$(".thickboxcontent", jqDom).remove(); 

editor.set_html(jqDom.html()); 

Tal vez eso podría ayudar a

5

Si desea que el HTML de cada elemento coincidente a su selector, trate de hacer un map:

var allHtmls = jqDom.find('.thickbox').map(function(){ 
    return this.innerHTML; 
}); 

Además, parece que es posible que desee utilizar unwrap que se añadió a jQuery 1.4 + (http://api.jquery.com/unwrap/)

jqDom.find('.thickbox').children().unwrap();

+0

Gracias por la respuesta, sin embargo, no quiero el HTML de cada elemento coincidente, en lugar de solo el HTML para el jqDom completo después de que se hayan realizado los cambios. Como estoy tratando con un editor externo, recibo HTML del editor (todo bien) y lo convierto a DOM (lo cual está bien), realizo cambios en DOM usando JQuery (lo cual está bien). Es la devolución de una representación de cadena del DOM (HTML completo) después de haber realizado los cambios a través de JQuery. Usar el wrap/unwrap suena bien para la manipulación, pero eso es todo g en este momento. – Scozzard

+3

Luego ajuste el html que está enviando en un solo div, y luego llame 'html' en él. De esta forma no se almacena como elementos múltiples en el objeto jquery. –

+0

+1 porque su último comentario es la respuesta – Scozzard

Cuestiones relacionadas