2011-11-14 26 views
13

Decir que tengoelemento de jQuery obtener DOM como cadena

$(":input[type=text]:first") 

¿Cómo llego

<input type="text" value="" size="28" maxlength="140" tabindex="1" placeholder="search" class="textbox" name="q" autocomplete="off"> 

Suponiendo corro en este SO?

Actualizar No quiero llamar al .parent() ya que tengo muchas otras cosas en el elemento primario.

+1

Sólo una nota: en realidad se debe citar sus selectores de atributos. '$ (": input [type = 'text']: first ")'. –

+0

Sí, fue simplemente un ejemplo, ese no es el selector real. Por lo general trato de evitar el uso de selectores de atributos de todos modos. – bevacqua

+1

posible duplicado de [Obtener el HTML externo del elemento seleccionado] (http://stackoverflow.com/questions/2419749/get-selected-elements-outer-html) – Blazemonger

Respuesta

20

An old trick:

var selector = ":input[type=text]:first"; 

var str = $(selector).clone().wrap('<div/>').parent().html(); 

actualización Usted no necesita preocuparse acerca de llamar .parent() ya que se trabaja con un clon huérfanos del selector original.

+1

¿Por qué es importante el clon? Si estoy creando un artículo sobre la marcha, ¿eso importaría? – casraf

+1

El elemento interno no se crea sobre la marcha; está siendo seleccionado del DOM, por lo que lo clonamos para evitar alterar el DOM. – Blazemonger

+0

¿Qué hay de $ ("a"). Html (''). Prop ("outerHTML"))? –

4

Usa jQuery.html() al agregar a un elemento creado.

$('<div/>').append($(":input[type=text]:first").clone()).html() 

Aquí está un violín proporcionando un ejemplo: http://jsfiddle.net/Zwbmx/1/

+1

Pero ahora ha movido el elemento original fuera del DOM. – Blazemonger

+0

Esto eliminará la entrada del DOM y la adjuntará a un div recién creado. Primero debe clonar la entrada. –

+0

@Rocket a la derecha Modifiqué el código para clonar primero el elemento. –

-1

¿Qué tal:

var str = $(selector)[0] 

tal vez añadir un cheque que hay un elemento devuelto.

0

Siguiendo con lo que @Blazemonger ha respondido, si va a enviar este contenido html al servidor, vale la pena deshacerse de todas las etiquetas innecesarias, espacios en blanco y saltos de línea que no agregan ningún valor.

var quote = $(".invoice") //get hidden print-version DOM element 
    .clone() 
    .wrap('<div/>') 
    .parent() 
    .html() 
    .replace(/ /g, '') //get rid of indentation spaces 
    .replace(/(\r\n|\n|\r)/gm, "") //get rid of line breaks 
    .replace(/<!--[\s\S]*?-->/g, ""); //get rid of comment tags 

Mi html tenía 50kb, después de deshacerse de esto, ¡se redujo a 4kb!

25

¿Qué tal

$(selector).prop("outerHTML"); 
+1

Esta debería ser la respuesta correcta –

Cuestiones relacionadas